【问题标题】:REST url - user by id and nameREST url - 按 id 和名称的用户
【发布时间】:2021-11-10 05:20:32
【问题描述】:

我有两个动作:

[HttpGet]
[Route("Users/{id}")]
public async Task<IActionResult>GetUser(int id)

[HttpGet]
[Route("Users")]
public async Task<IActionResult>GetUser(string name)

当我尝试调用 /Users?name=aaa 时,我收到以下错误:

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: 请求匹配多个端点。匹配:

我做错了什么?

---------- 我注意到我还有一个动作: [HttpGet] 公共异步 TaskGetOffers() 这就是原因,对不起

【问题讨论】:

    标签: c# .net-core asp.net-core-webapi asp.net-core-routing


    【解决方案1】:

    如果要从查询字符串中检索数据,则需要使用 FromQueryAttribute

    // e.g. Users/10
    [HttpGet]
    [Route("Users/{id:int}")]
    public async Task<IActionResult>GetUser([FromRoute] int id)
    
    // e.g. Users?name=John
    [HttpGet]
    [Route("Users")]
    public async Task<IActionResult>GetUser([FromQuery] string name)
    

    【讨论】:

    • 我注意到我还有一个动作:[HttpGet] public async TaskGetOffers() 这就是原因,对不起,谢谢
    【解决方案2】:

    试试下面的代码

    [HttpGet]
    [Route("Users/{id}")]
    public async Task<IActionResult>GetUser([FromQuery] int id)
    
    [HttpGet]
    [Route("Users")]
    public async Task<IActionResult>GetUser([FromQuery]string name)
    

    【讨论】:

    • 我注意到我还有一个动作:[HttpGet] public async TaskGetOffers() 这就是原因,对不起,谢谢
    【解决方案3】:

    你能改变吗

    [Route("Users")]
    public async Task<IActionResult>GetUser(string name)
    

    [Route("Users/{name}")]
    public async Task<IActionResult>GetUser(string name)
    

    并在您的路线中提供类型

    [Route("Users/{id:int}")]
    

    【讨论】:

    • 好的,但是如何在查询字符串中做到这一点?
    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 2012-12-26
    • 2022-10-16
    • 2012-10-01
    • 2023-01-09
    • 1970-01-01
    • 2017-12-18
    • 2011-05-07
    相关资源
    最近更新 更多