簡體   English   中英

多個可選參數 web api 屬性路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM