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

Har*_*rry 6 c# asp.net asp.net-web-api attributerouting asp.net-web-api-routing

我是属性路由的新手,我不确定这是否可能。

我有一个属性路由,它可以像这样正常工作:

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

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

我尝试过的:

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

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

我怎样才能做到这一点?

编辑 1:下面 Nkosi 的回答有效,但是需要额外的修改。

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

列表或数组必须是第二个,因为如果没有提供值,它会自动为空,并且不能用 = null 标记为可选。

Nko*_*osi 4

{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)
Run Code Online (Sandbox Code Playgroud)

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