2

我收到以下消息:

[Route("/devices/{DeviceId}/punches/{EmployeeId}/{DateTime}", "GET,POST")]
public class Punch
{
    public string DeviceId { get; set; }
    public string EmployeeId { get; set; }
    public DateTimeOffset DateTime { get; set; }
    public string TimeZoneId { get; set; }
    public PunchKind Kind { get; set; }
}

我需要DateTimeOffset在 DateTime 部分传递一个完整的...

以下工作完美:

http://localhost:54146/devices/1001/punches/666/2012-04-01

但是当我尝试传递完整的日期时间偏移数据时,它失败并出现 HTTP 400 错误:错误请求。到目前为止,我已经尝试了以下相同的错误(即使是 URL 编码也没有帮助):

http://localhost:54146/devices/1001/punches/666/2012-04-01T20:59:00.0000000-03:00 http://localhost:54146/devices/1001/punches/666/2012-04-01 20:59:00.0000000-03:00 http://localhost:54146/devices/1001/punches/666/2012-04-0120:59:00.0000000-03:00 http://localhost:54146/devices/1001/punches/666/2012-04-01T20%3A59%3A00.0000000-03%3A00

其他排列都因相同的错误而失败。

如何将 DateTimeOffset 作为 URL 的一部分传递?

4

1 回答 1

3

<,>,*,%,&,:并且\默认情况下,ASP.NET 不允许在 URL 中使用。在您的情况下,冒号是罪魁祸首(无论是否编码都无关紧要)。您可以通过将以下内容添加到 Web.config 文件来修复它:

<system.web>
...
    <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\" />
...
</system.web>

参考:

于 2013-06-22T04:11:27.423 回答