gil*_*hal 3 c# asp.net asp.net-mvc-routing asp.net-core-mvc asp.net-core
我正在使用asp.net 5 mvc api,并且目前正在使用Accounts Controller。
因为我在许多不同的地方都看到在/api/TokenWeb 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)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
使用属性路由,您可以在的route属性上使用波浪号(〜)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) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
对于ASP.NET Core,似乎~不再需要波浪线符号(请参见接受的答案)以覆盖控制器的路由前缀-而是适用以下规则:
应用于/开头的动作的路径模板不会与应用于控制器的路径模板组合在一起。本示例匹配一组类似于默认路由的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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |