多个可选参数 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,并且不能使用 = null 标记为可选。
使用查询字符串。
[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag, List<int> tagIds, int? categoryId = null)
Url: /getissuesbyflag/1?tagIds=2,5,6&categoryId=56
如果需要,您确实应该为可选参数和路径参数使用查询字符串。
{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 值路由时 table 不知道你指的是哪个可选参数,因此 404
我是属性路由的新手,我不确定这是否可行。
我有一个属性路由,像这样工作正常:
[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 标记为可选。
使用查询字符串。
[HttpGet]
[Route("GetIssuesByFlag/{flag:int=3?}")]
public IEnumerable<IssueDto> GetIssuesByFlag(int flag, List<int> tagIds, int? categoryId = null)
Url: /getissuesbyflag/1?tagIds=2,5,6&categoryId=56
如果需要,您确实应该为可选参数和路径参数使用查询字符串。
{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 值路由时 table 不知道你指的是哪个可选参数,因此 404