【问题标题】:Creating a different route to a specific action为特定操作创建不同的路线
【发布时间】:2016-01-10 18:17:34
【问题描述】:

我正在开发一个 asp.net 5 mvc api,我目前正在开发 Accounts Controller。

因为我在许多不同的地方看到有使用/api/Tokenrouting 来登录 web api 的约定。我想路由到没有帐户前缀的特定方法,我不想使用不同的控制器,我更喜欢在 Startup.cs 中使用属性而不是路由以避免将来出现混淆。

这是我目前拥有的

[Route("api/[controller]")]
public class AccountsController : Controller
{
    [HttpPost("login")]
    public async Task<JwtToken> Token([FromBody]Credentials credentials)
    {
     ...
    }

    [HttpPost]
    public async Task CreateUser([FromBody] userDto)
    {
      ...
    }
}

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc


    【解决方案1】:

    使用属性路由,您可以在 Action 的路由属性上使用 波浪号 (~) 来覆盖 Controller 的默认路由(如果需要):

    [Route("api/[controller]")]
    public class AccountsController : Controller {
    
        [HttpPost]
        [Route("~/api/token")] //routes to `/api/token`
        public async Task<JwtToken> Token([FromBody]Credentials credentials) {
            ...
        }
    
        [HttpPost] 
        [Route("users")] // routes to `/api/accounts/users`
        public async Task CreateUser([FromBody] userDto) {
            ...
        }
    }
    

    【讨论】:

    • 只是为了突出显示@gilmishal 的某些内容,您可以在操作以及Controller 上设置Route 属性。
    • 我编辑了答案以反映这一点。我也应该在答案中强调这一点吗?
    • 只是为了它,也许做一个它实际上覆盖路由的例子?现在他们都在使用/api/
    • 虽然他们都使用/api/,但路线不同,因为原始路线是/api/accounts/login,而我建议的覆盖示例转到/api/token,就像OP想要的那样。
    • 对于视图(不是 api)请参阅 stackoverflow.com/a/15836469/9258504
    【解决方案2】:

    对于 ASP.NET Core,似乎不再需要波浪号 ~ 符号(请参阅已接受的答案)来覆盖控制器的路由前缀 - 相反,the following rule 适用:

    应用于以 / 开头的操作的路由模板不会与应用于控制器的路由模板组合。此示例匹配一组类似于默认路由的 URL 路径。

    这是一个例子:

    [Route("foo")]
    public class FooController : Controller
    {
        [Route("bar")] // combined with "foo" to map to route "/foo/bar"
        public IActionResult Bar()
        {
            // ...
        }
    
        [Route("/hello/world")] // not combined; maps to route "/hello/world"
        public IActionResult HelloWorld()
        {
    
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多