属性路由 - 可选参数不起作用?

时间:2015-10-27 10:24:42

标签: asp.net-web-api attributerouting

根据http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx#optionals-and-defaults

使用属性路由时,可以通过添加问号(?)来获取可选参数。但它对我不起作用(ASP.NET Web API 5)。

    [Route("staff/{featureID?}")]
    public List<string> GetStaff(int? featureID) {
        List<string> staff = null;          
        return staff;
    }

如果我使用staff/1等,它可以正常工作,如果我使用/staff我会得到通常的说法:

  

“找不到与请求URI匹配的HTTP资源...”

     

“在匹配的控制器上找不到任何操作   请求。“

我错过了参考或其他什么?或者做错了?

3 个答案:

答案 0 :(得分:8)

我也遇到了同样的问题,并以不同的方式解决了它。但是,它仍然不适用于我在博客文章中列出的内容。我没有在路由定义中添加默认参数值,而是将其添加到函数定义中。

我必须执行此操作才能使我的示例正常工作,因为我使用string而不是int并在null的路由定义中添加默认值导致我的功能参数的字符串值为"null"

[Route("staff/{featureID?}")]
public List<string> GetStaff(int? featureID = null) {
    List<string> staff = null;          
    return staff;
}

答案 1 :(得分:4)

这是因为您始终必须为可选参数设置默认值,即使默认值为null也是如此。这就是为什么这样做的原因:

[Route("staff/{featureID=null}")]

答案 2 :(得分:1)

如果我这样做:

[Route("staff/{featureID=null}")]

而不是

[Route("staff/{featureID?}")]

有效。

从技术上讲,这不能回答我的问题,但它让我工作!