【问题标题】:Why get error 404 when I try to pass date variable in get request to web api method?当我尝试将获取请求中的日期变量传递给 Web api 方法时,为什么会出现错误 404?
【发布时间】:2016-06-12 06:13:53
【问题描述】:

我从事我的 web api 项目。 当我尝试将 get 请求中的日期变量传递给 web api 方法时,出现错误 404。

这里是web api方法:

[HttpGet]
[Route("ReportDetailed/{clientId}/{date}")]
public IHttpActionResult ReportDetailed(int clientId, DateTime date )
{
    return Ok();
}

这里是我如何尝试访问上面的函数(来自 URL 的行):

http://localhost/station/api/Reports/ReportDetailed/12/Wed%20Jun%2001%202016%2000:00:00%20GMT+0300%20(Jerusalem%20Daylight%20Time)

其中clientId为12,日期解析为javascript日期对象:

/Wed%20Jun%2001%202016%2000:00:00%20GMT+0300%20(Jerusalem%20Daylight%20Time)

当我从 web api 函数解析的 Date 对象和 date 参数上方的 URL 中删除时,它工作得很好(所以我猜是 date 对象的问题)。

知道为什么我尝试在 URI 中传递对象时收到错误 404 吗?

【问题讨论】:

  • 如果您尝试更简化的日期,例如:/ReportDetailed/12/2016-06-06,会怎样?那样有用吗?如果是这样,则日期模型绑定器无法识别您的日期 - 您可以使用字符串参数并在您的操作中对其进行解析(如果无法解析则抛出异常)
  • @freedomn-m 谢谢。您的评论有帮助。

标签: c# asp.net-web-api asp.net-web-api2


【解决方案1】:

您提供的日期不是有效的日期格式。尝试更通用的可解析格式,例如 YYYY-MM-dd HH:mm:ss

您还应该在参数上使用Route constraints,这将尝试验证您的参数以确保它们的格式正确

[HttpGet]
[Route("ReportDetailed/{clientId:int}/{date:datetime}")]
public IHttpActionResult ReportDetailed(int clientId, DateTime date )
{
    return Ok();
}

【讨论】:

    【解决方案2】:

    .NET 无法识别日期格式 首先将您的日期转换为 UTC 字符串,这将返回您的日期的字符串表示形式。所以该值将作为字符串传递

    var dateString= dateJs.toUTCString();
    

    然后在你的 C# 代码中解析它。

    public IHttpActionResult ReportDetailed(int clientId, string dateString)
        DateTime dateC# = DateTime.Parse(dateString);
    

    【讨论】:

    • Katana,当我尝试解析 toUTCString() 时,我得到了错误的日期:“Tue, 31 May 2016 21:00:00 GMT”
    • @Michael 我认为您正在创建一个新的日期实例。使用您在上面粘贴的值。 Michael API 中的错误消失了吗?
    • @Michael 抱歉,我忘了说 toUTCString 的输出是一个字符串,所以需要将 API 中的 datetime 参数更改为字符串
    • 我使用 toISOString()
    • 我在操作中未定义日期
    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 2020-02-25
    • 2016-01-25
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多