[英]Multiple optional parameters web api attribute routing
我是屬性路由的新手,我不確定這是否可能。
我有一個屬性路由,它可以像這樣正常工作:
[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 標記為可選。
{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
使用查詢字符串。
[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag, List<int> tagIds, int? categoryId = null)
網址:/getissuesbyflag/1?tagIds=2,5,6&categoryId=56
如果需要,您真的應該使用查詢字符串作為可選參數和路徑參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.