asp.net-web-api – Asp.net WebApi将UTC时间字符串反序列化为本
我有这个网址
http://example.com/api/record/getall?startdate=1994-11-05T17:15:30Z 和这个webapi端点 [ActionName("GetAll")] public object GetAll(DateTime startDate) { ... } 我遇到的问题是,startDate接收到当地时间“11/5/1994 9:15:30 AM”的反序列化字符串,而不是留在UTC时间,我想要什么“11/5/1994 5:15: 30 PM“。 我正在使用VS2012 update2,最新的Json.net nuget软件包。但是,如果我在一个单独的控制台应用程序中使用json.net进行测试,那么相同的字符串“1994-11-05T17:15:30Z”可以正确地反序列化为“11/5/1994 5:15:30 PM”。 任何人都知道这里有什么问题? 解决方法
虽然你已经有了
found a solution的问题,但是我以为我会解释为什么它不按预期工作。
WebApi使用内容类型协商来确定在读取数据时要使用的解析器。这意味着它会查看请求的Content-Type标题以进行确定。如果Content-Type头设置为application / json,那么它将使用Json.Net来解析内容并将其提供给您的方法。 HTTP GET请求(例如您在此处所做的)没有设置内容类型。这种情况下的“内容”只是URL中的查询字符串。 WebApi不期望在这里找到JSON数据,所以不会尝试使用JSON解析器来理解它。即使如此,您传递给您的GetAll方法的字符串也不是有效的JSON。 (需要引用才有效。) 现在,如果要更改方法来接受POST请求,并且将内容类型标头设置为application / json,并将该日期作为JSON字符串传递到正文中,那么WebApi将使用Json.Net进行解析,它会像你所期望的那样工作。 例如,说你的方法看起来像这样: [HttpPost] public object GetAll([FromBody]DateTime startDate) { try { return new { StartDate = startDate.ToString("yyyy-MM-dd HH:mm:ss"),StartDateKind = startDate.Kind.ToString(),}; } catch (Exception ex) { return ex.Message; } } 你发出这样的请求(注意POST): POST http://localhost:57524/api/values/GetAll HTTP/1.1 Content-Type: application/json Content-Length: 22 Host: localhost:57524 "1994-11-05T17:15:30Z" 响应将如下所示: HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Fri,31 May 2013 01:25:48 GMT Content-Length: 57 {"StartDate":"1994-11-05 17:15:30","StartDateKind":"Utc"} 正如你所看到的,它在这种情况下正确地识别UTC为UTC。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 使用ASP.NET MVC /实体框架对POCO验证的建议
- 使用ASP.net和Access数据库保护SQL Injection的网站
- asp.net-mvc – 传递的JSON集合未被控制器拾取
- vbscript – 经典ASP 3.0从Recordset创建数组
- asp.net-mvc – asp.net MVC中RavenDB中的多租户索引
- asp.net – iTextSharp单位
- 为ASP.NET MVC创建一个基于Unity的ControllerFactory
- asp.net – 用于Microsoft.Office.Interop.Excel的Excel dl
- asp.net-mvc-3 – MVC3有条件地禁用Html.TextBoxFor()
- [ASP.NET] 网页导向
- 单元测试 – 单元测试Swagger输出
- asp.net-mvc – 如何将401认证错误返回给RestSha
- asp.net-mvc – 如何使用Entity Framework和Memb
- C#中try catch中throw ex和throw方式抛出异常有何
- asp.net-mvc – 如何将MVC 5 IdentityModels.cs移
- 单元测试 – 测试urlhelper的WebApi单元现在为空
- asp.net-mvc – asp.net mvc单选按钮状态
- asp.net-mvc – 从mvc 4(4.5)升级到mvc 5(4.5.1)
- asp.net – RenderBody和RenderSection之间的区别
- stored-procedures – 如何在ASP.Net MVC(C#)中调