属性路由识别可选的查询字符串参数

时间:2016-09-19 08:37:02

标签: c# asp.net-web-api asp.net-web-api-routing attributerouting

我有一个API动作:

 [HttpGet, Route("{id}/overview/")]
 public async Task<HttpResponseMessage> Overview(string id, DateTime from, DateTime? to)
{
...
}

正如您所注意到的,to是可选参数,但是当我发出请求时:

  

'/ API /奶油/ 3d7dd454c00b /概述从= 2016-09-04T18:00:00.000Z

我收到404错误。如果我从参数中删除to public async Task<HttpResponseMessage> Overview(string id, DateTime from)

然后一切正常。如何强制它使用to参数?

1 个答案:

答案 0 :(得分:6)

使用FromUri属性并使其成为可选



    [HttpGet, Route("{id}/overview/")]
     public async Task Overview(string id, [FromUri]DateTime from, [FromUri]DateTime? to = null)
    {
    ...
    }

为了扩展这个,我们选择了id参数,因为你已经在你的路由中指定了它,框架已经看到匹配的路由并尝试调用匹配的方法,即使路径缺少它尝试的其余参数从查询字符串中提取它们。

然后你得到你的404没有与你的通话匹配的方法,这是由于DateTime可以为空而不是可选的。

希望这有帮助