多个可选参数web api属性路由

时间:2017-02-08 13:47:15

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

大家好,我是属于路由的新手,不确定这是否可行。

我所拥有的属性路线可以正常工作

[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag)

现在我想添加一些额外的可选参数来缩小我的搜索范围,所以我想添加2个额外的可选参数。

我的尝试:

[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3?}/{categoryId:int?}/{tagIds?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , int? categoryId = null, int?[] tagIds = null)

如果我的电话是/api/controller/1/2,这样可以正常工作 但在涉及/api/controller/1

时失败了404

我怎样才能实现这个目标?

编辑1:Nkosi的答案虽然有效但需要进行额外的修改。

[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3}/{tagIds?}/{categoryId:int?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , List<int> tagIds, int? categoryId = null )

列表或数组必须是第二个,因为如果没有提供任何值则它自动为null,并且不能用= null

标记为可选

2 个答案:

答案 0 :(得分:1)

{flag:int=3?}是问题所在。它是可选的{flag:int?},具有操作中的默认值或{flag:int=3}

[HttpGet]
Route("GetIssuesByFlag/{flag:int=3}/{categoryId:int?}/{tagIds?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , int? categoryId = null, int?[] tagIds = null)

您目前有3个可选参数。当你只有1值路由表时,不知道你指的是哪个可选参数,因此就是404

答案 1 :(得分:0)

使用查询字符串。

{}

网址:/ getissuesbyflag / 1?tagIds = 2,5,6&amp; categoryId = 56

如果需要,您确实应该使用查询字符串作为可选参数和路径参数。