【问题标题】:Resolve routes by named parameters通过命名参数解析路由
【发布时间】:2019-07-31 06:11:38
【问题描述】:

我有 ASP Core 2.2 应用程序。我定义了控制器:

using Microsoft.AspNetCore.Mvc;

namespace Web.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            return Ok();
        }

        [HttpGet("{id}")]
        public IActionResult GetById(int id)
        {
            return Ok();
        }
    }
}

当我使用 url /api/users/3 请求时,一切正常,方法 GetById 被调用。但是,如果我尝试请求 /api/users?id=3 方法 Get 被调用,我不知道如何解决这个问题。此外,我想创建两个仅通过参数名称不同的类似方法。例如public IActionResult GetById(int id)public IActionResult GetByAge(int age),所以如果可能的话,我需要通过命名参数进行严格的路由。我不想自己实现自定义中间件来解析路由,我想尝试为此找到 ASP 功能。

【问题讨论】:

    标签: asp.net-core routing


    【解决方案1】:

    url /api/users/3: "3" 用作路由值的一部分。

    url/api/users?id=3: "3" 用作url中的查询字符串。

    带有Http[Verb]属性的属性路由是路由值的一部分

    您可以更改控制器上方的 Route 属性以指定如下所示的操作名称:

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        // Get api/users/get
        [HttpGet]
        public IActionResult Get()
        {
            return Ok();
        }
    
        //Get api/users/GetById/3
        [HttpGet("{id}")]
        public IActionResult GetById(int id)
        {
            return Ok();
        }
    }
    

    参考:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.2

    【讨论】:

    • 感谢您的回复。好的,我了解属性路由,但我有兴趣可以通过命名参数解析请求吗?
    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2021-05-26
    • 2011-12-23
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多