使用属性路由时,可以通过添加问号(?)来获取可选参数。但它对我不起作用(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资源...”
“在匹配的控制器上找不到任何操作 请求。“
我错过了参考或其他什么?或者做错了?
答案 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?}")]
有效。
从技术上讲,这不能回答我的问题,但它让我工作!