MVC 请求不匹配任何路由
MVC Request did not match any routes
我有以下控制器,我需要在其中找到各种操作的路线:
[Route("api/[controller]/[action]")]
[EnableCors("MyPolicy")]
public class UserController : Controller
{
IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[HttpGet]
public async Task<IEnumerable<User>> Get()
{
return await _userService.GetAllAsync();
}
[HttpGet("{id}")]
public async Task<User> Get(object id)
{
return await _userService.FirstOrDefaultAsync(x => x.Id == (ObjectId)id);
}
}
根据https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing
这样的请求 http://localhost:55556/User/Get 应该传递给路由,但是当 运行 在 Visual Studio 调试中我收到以下消息:
Request starting HTTP/1.1 GET http://localhost:55556/User/Get
dbug: Microsoft.AspNetCore.Builder.RouterMiddleware[1]
Request did not match any routes.
这里可能有什么问题?有没有办法列出所有可能的路线?或者确定注册了哪些控制器?
更仔细地查看您的路由模板定义:
[Route("api/[controller]/[action]")]
它有一个 api/
字符串前缀 (const),因此 MVC 中间件专家要求
http://localhost:55556/api/User/Get
没有
http://localhost:55556/User/Get
此外,如果在 REST 范围内讨论,使用 User/GET
、User/POST
等路由是一个坏主意。为此,相应的 HTTP 方法(Gey,Post, Put, ...) 被定义和使用。换句话说,您现在有一个冗余重复,例如来自 curl 的请求看起来像:
curl -X GET 'http://localhost:55556/User/Get`
我有以下控制器,我需要在其中找到各种操作的路线:
[Route("api/[controller]/[action]")]
[EnableCors("MyPolicy")]
public class UserController : Controller
{
IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[HttpGet]
public async Task<IEnumerable<User>> Get()
{
return await _userService.GetAllAsync();
}
[HttpGet("{id}")]
public async Task<User> Get(object id)
{
return await _userService.FirstOrDefaultAsync(x => x.Id == (ObjectId)id);
}
}
根据https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing
这样的请求 http://localhost:55556/User/Get 应该传递给路由,但是当 运行 在 Visual Studio 调试中我收到以下消息:
Request starting HTTP/1.1 GET http://localhost:55556/User/Get
dbug: Microsoft.AspNetCore.Builder.RouterMiddleware[1]
Request did not match any routes.
这里可能有什么问题?有没有办法列出所有可能的路线?或者确定注册了哪些控制器?
更仔细地查看您的路由模板定义:
[Route("api/[controller]/[action]")]
它有一个 api/
字符串前缀 (const),因此 MVC 中间件专家要求
http://localhost:55556/api/User/Get
没有
http://localhost:55556/User/Get
此外,如果在 REST 范围内讨论,使用 User/GET
、User/POST
等路由是一个坏主意。为此,相应的 HTTP 方法(Gey,Post, Put, ...) 被定义和使用。换句话说,您现在有一个冗余重复,例如来自 curl 的请求看起来像:
curl -X GET 'http://localhost:55556/User/Get`