我需要制作一个支持多个ASP.NET Core, Web API
动词的HttpGet
,唯一的区别是查询字符串,但是看来查询字符串不能成为路由模板的一部分-是这样吗?
路由模板非常相似,实际上它们仅在查询字符串方面有所不同。
[Authorize]
public class SymbolsController : Controller
{
[
HttpGet,
Route("api/symbols")
]
public Task<IEnumerable<Symbol>> Symbols([FromServices] ISymbolService symbolService)
{
return symbolService.GetSymbolsAsync();
}
[
HttpGet,
Route("api/symbols?{childrenOf=id}")
]
public Task<IEnumerable<Symbol>> ValidChildren(
[FromQuery] Guid id,
[FromServices] ISymbolService symbolService)
{
return symbolService.GetValidChildrenAsync(id);
}
}
由于
?
在路由模板中不是有效字符,因此将引发异常。我该如何实现? 最佳答案
我想出了一个更简单,更直接的解决方案。我只是使用FromQuery
属性并使模板保持简单。我检查id
变量的存在并相应地处理它。
[HttpGet, Route("api/symbols")]
public Task<IEnumerable<Symbol>> Symbols(
[FromQuery] Guid id,
[FromServices] ISymbolService symbolService) =>
id == default
? symbolService.GetSymbolsAsync()
: symbolService.GetValidChildrenAsync(id);