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 标记为可选。
{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
| 归档时间: |
|
| 查看次数: |
9857 次 |
| 最近记录: |