asp.net – 如何传递datetime参数?
如何将UTC日期传递到Web API?
传递2010-01-01工作正常,但当我通过UTC日期,如2014-12-31T22:00:00.000Z(有时间组件),我得到一个HTTP 404响应。所以 http://domain/api/controller/action/2012-12-31T22:00:00.000Z 产生404错误响应,而 http://domain/api/controller/action/2012-12-31 工作正常。 如何将UTC日期传递到Web API然后 – 或至少指定日期和时间? 解决方法
我感觉你的痛苦…另一个日期时间格式…只是你需要的!
使用Web Api 2,您可以使用路由属性指定参数。 所以使用您的类和您的方法的属性,您可以使用您遇到麻烦的utc格式(显然是它的ISO8601,可能是使用startDate.toISOString()到达)编码一个REST URL, [Route(@"daterange/{startDate:regex(^d{4}-d{2}-d{2}Td{2}:d{2}:d{2}.d{3}Z$)}/{endDate:regex(^d{4}-d{2}-d{2}Td{2}:d{2}:d{2}.d{3}Z$)}")] [HttpGet] public IEnumerable<MyRecordType> GetByDateRange(DateTime startDate,DateTime endDate) ….但是,虽然这个工作与一个日期(startDate),由于某些原因,它不工作,当endDate是这种格式…调试小时,只有线索是异常说它不喜欢冒号“:”(甚至虽然web.config设置为: <system.web> <compilation debug="true" targetFramework="4.5.1" /> <httpRuntime targetFramework="4.5.1" requestPathInvalidCharacters="" /> </system.web> 所以,让另一个日期格式(从ISO日期格式的polyfill取得),并将其添加到Javascript日期(为了简洁,只能转换为分钟): if (!Date.prototype.toUTCDateTimeDigits) { (function () { function pad(number) { if (number < 10) { return '0' + number; } return number; } Date.prototype.toUTCDateTimeDigits = function () { return this.getUTCFullYear() + pad(this.getUTCMonth() + 1) + pad(this.getUTCDate()) + 'T' + pad(this.getUTCHours()) + pad(this.getUTCMinutes()) + 'Z'; }; }()); } 然后,当您将日期发送到Web API 2方法时,可以将它们从字符串转换为日期: [RoutePrefix("api/myrecordtype")] public class MyRecordTypeController : ApiController { [Route(@"daterange/{startDateString}/{endDateString}")] [HttpGet] public IEnumerable<MyRecordType> GetByDateRange([FromUri]string startDateString,[FromUri]string endDateString) { var startDate = BuildDateTimeFromYAFormat(startDateString); var endDate = BuildDateTimeFromYAFormat(endDateString); ... } /// <summary> /// Convert a UTC Date String of format yyyyMMddThhmmZ into a Local Date /// </summary> /// <param name="dateString"></param> /// <returns></returns> private DateTime BuildDateTimeFromYAFormat(string dateString) { Regex r = new Regex(@"^d{4}d{2}d{2}Td{2}d{2}Z$"); if (!r.IsMatch(dateString)) { throw new FormatException( string.Format("{0} is not the correct format. Should be yyyyMMddThhmmZ",dateString)); } DateTime dt = DateTime.ParseExact(dateString,"yyyyMMddThhmmZ",CultureInfo.InvariantCulture,DateTimeStyles.AssumeUniversal); return dt; } 所以url会的 http://domain/api/myrecordtype/daterange/20140302T0003Z/20140302T1603Z Hanselman在这里给出一些相关信息: http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 日志框架与System.Diagnostics跟踪
- ASP.NET – ERR_EMPTY_RESPONSE /重置连接/无法显示页面
- 将ASP.NET从1.1升级到2.0 – 任何问题?
- asp.net – HTML属性bgcolor已被弃用:使用什么?
- asp.net-mvc – 有没有办法为MVC控制器中的每个动作设置[Au
- ASP.Net验证器默认样式
- asp.net-mvc – 在TDD和DDD中,你如何处理假货中的只读属性?
- 将ASP.NET的“ReturnURL”转换为绝对URL
- asp.net-web-api – 使用OWIN SelfHost和Windows身份验证的
- asp.net-mvc – 我可以创建一个带有MVC3助手的选择列表
- asp.net-mvc-2 – 如何在自定义验证属性中为不同
- asp.net-mvc – 在MVC中将值从Controller传输到S
- asp.net – 带LinqDataSource的DropDownList和一
- 制作ASP.Net Web表单的“模式”是什么?
- asp.net-mvc-3 – 用于基本身份验证的asp mvc 3
- .net – RESTful WCF的裸最低配置
- asp.net – 为自定义UserControl提供呈现HTML中的
- asp.net-mvc – 在不显眼的验证过程中使用parseJ
- ASP.NET Cookieless Forms在登录页面被加入书签时
- asp.net – 使用Ajax,在服务器或客户端生成额外的