asp.net - 如何传递日期时间参数?

标签 asp.net datetime asp.net-web-api

如何将 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 - 或者至少指定日期时间?

最佳答案

问题是双重的:

1。 .在 route

默认情况下,IIS 将所有带点的 URI 视为静态资源,尝试返回它并完全跳过进一步处理(通过 Web API)。这是在 Web.config 的 system.webServer.handlers 部分中配置的。 :默认处理程序句柄 path="*." 。您不会在这个 path 中找到太多关于奇怪语法的文档。属性(正则表达式会更有意义),但这显然意味着“任何不包含点的内容”(以及下面第 2 点中的任何字符)。因此名称中的“Extensionless”ExtensionlessUrlHandler-Integrated-4.0 .

在我看来,按照“正确性”的顺序,可以有多种解决方案:

  • 专门为必须允许点的路由添加一个新处理程序。请务必将其添加到默认值之前。为此,请确保先删除默认处理程序,然后将其添加回您的默认处理程序之后。
  • 更改 path="*."属性为path="*" 。然后它会捕获所有内容。请注意,从那时起,您的 Web api 将不再将带点的来电解释为静态资源!如果您在 Web API 上托管静态资源,则不建议这样做!
  • 将以下内容添加到您的 Web.config 以无条件处理所有请求:在 <system.webserver> 下:<modules runAllManagedModulesForAllRequests="true">

2。 :在 route

更改上述内容后,默认情况下,您会收到以下错误:

A potentially dangerous Request.Path value was detected from the client (:).

您可以更改 Web.config 中预定义的禁止/无效字符。下<system.web> ,添加以下内容:<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,*,\,?" /> 。我已经删除了:来自无效字符的标准列表。

更简单/更安全的解决方案

虽然这不是您问题的答案,但更安全、更简单的解决方案是更改请求,以便不需要所有这些。这可以通过两种方式完成:

  1. 将日期作为查询字符串参数传递,例如 ?date=2012-12-31T22:00:00.000Z .
  2. 删除 .000来自每个请求,并对 url 进行编码,因此替换所有 :%3A ,例如通过使用HttpUtility.UrlEncode() .

关于asp.net - 如何传递日期时间参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14359566/

相关文章:

c# - 配置 IIS 以接收电子邮件

c# - ASP.NET 页面可以使用 WPF 控件吗?

python - 加快Python时间戳到日期时间的转换

c# - UnitTest 类中的 IOC - Unity.WebApi

javascript - 如何在 AngularJS 应用程序中预览 PDF 文件?

asp.net - 如何控制模型验证错误的显示语言

c# - 无法计算出 XPath 计数表达式结果。 C# xml Web 服务

java - 获取用户无法更改的时间

java - 如何传递日期(dd/MM/yyyy HH :mm) as a parameter in REST API

c# - 没有找到合适的方法来覆盖 webapi