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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- iis-7 – IIS重置会强制缓存项目重新发送吗?
- 在ASP.NET MVC 3中可以使用甜甜圈缓存
- asp.net-mvc – 具有引导Navbar的MVC – 将所选项目设置为活
- asp.net – WCF与WebAPI和本机移动设备
- asp.net – ASP MVC用户配置文件
- 如何从ASP.NET Web服务生成JSONP以进行跨域调用?
- asp.net – ASP .NET核心Cookie身份验证到期时返回时从时间
- asp.net – System.Reflection.Assembly.LoadFile锁定文件
- asp.net-mvc – 在MVC2中使用区域
- asp.net-mvc – 谷歌日历无法读取ICalendar.
- asp.net-mvc – 为什么Microsoft堆栈说成本高昂?
- asp.net – 304未修改静态文件
- asp.net – 元素’ToolkitScriptManager’不是已
- asp.net-mvc – 我在MVC 5 Visual Studio 2013中
- asp.net-mvc – “GenerateResource”任务失败,意
- asp.net-mvc-3 – MVC3 Ajax.ActionLink
- asp.net – RequiredFieldValidator – 如何摆脱
- asp.net-mvc – 用静态项绑定Html.DropDownList
- asp.net-mvc – 使用Html.RouteLink添加一个css类
- VS 2015 CTP 6 Nuget Package Source
