如何将 UTC 日期传递给 Web API?
Passing 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 - 或者至少指定日期and time?
问题是双重的:
1. The .
在路线中
默认情况下,IIS 将所有带点的 URI 视为静态资源,尝试返回它并完全跳过进一步处理(通过 Web API)。这是在您的 Web.config 部分中配置的system.webServer.handlers
:默认处理程序句柄path="*."
。您不会在此处找到太多有关奇怪语法的文档path
属性(正则表达式会更有意义),但这显然意味着“任何不包含点的内容”(以及下面第 2 点中的任何字符)。因此名称中的“无扩展”ExtensionlessUrlHandler-Integrated-4.0
.
在我看来,按照“正确性”的顺序,可以有多种解决方案:
- 专门为必须允许点的路由添加一个新的处理程序。一定要添加它before默认值。为此,请确保您remove首先添加默认处理程序,然后将其添加回您的处理程序之后。
- 改变
path="*."
归因于path="*"
。然后它会捕获所有内容。请注意,从那时起,您的 Web api 将不再将带点的来电解释为静态资源!如果您在 Web API 上托管静态资源,则不建议这样做!
- 将以下内容添加到您的 Web.config 以无条件处理所有请求:
<system.webserver>
: <modules runAllManagedModulesForAllRequests="true">
2. The :
在路线中
更改上述内容后,默认情况下,您会收到以下错误:
从客户端 (:) 检测到潜在危险的 Request.Path 值。
您可以更改 Web.config 中预定义的禁止/无效字符。在下面<system.web>
,添加以下内容:<httpRuntime requestPathInvalidCharacters="<,>,%,&,*,\,?" />
。我已经删除了:
来自无效字符的标准列表。
更简单/更安全的解决方案
虽然这不是您问题的答案,但更安全、更简单的解决方案是更改请求,以便不需要所有这些。这可以通过两种方式完成:
- 将日期作为查询字符串参数传递,例如
?date=2012-12-31T22:00:00.000Z
.
- 剥去
.000
来自每个请求,并对 url 进行编码,因此替换所有:
's with %3A
,例如通过使用HttpUtility.UrlEncode()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)