【发布时间】:2017-06-26 04:11:31
【问题描述】:
我是属性路由的新手,我不确定这是否可能。
我有一个属性路由,它可以像这样正常工作:
[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 标记为可选。
【问题讨论】:
-
{flag:int=3?}是问题所在。它是可选的{flag:int?},在操作中具有默认值,或者是{flag:int=3}。您目前有 3 个可选参数。当您只有 1 值路由表时不会知道您指的是哪个可选参数,因此 404 -
Nikosi 的回答对我有用!好吧,第一个不是分裂的,已经删除了现在一切正常
-
第一个(从标志中删除可选)你能在答案上更新它,以便我可以标记为正确吗?
标签: c# asp.net asp.net-web-api asp.net-web-api-routing attributerouting