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