Dav*_*ine 5 routing asp.net-web-api asp.net-web-api2 asp.net-core asp.net-core-webapi
我需要创建一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发异常,因为?它不是路由模板中的有效字符.我怎样才能做到这一点?
我想出了一个更简单、更直接的解决方案。我只是使用该FromQuery属性并让模板保持简单。我检查id变量的存在并相应地处理它。
[HttpGet, Route("api/symbols")]
public Task<IEnumerable<Symbol>> Symbols(
[FromQuery] Guid id,
[FromServices] ISymbolService symbolService) =>
id == default
? symbolService.GetSymbolsAsync()
: symbolService.GetValidChildrenAsync(id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3062 次 |
| 最近记录: |