MVC请求与任何路由都不匹配

时间:2017-12-22 22:43:24

标签: asp.net-core-mvc asp.net-core-routing

我有以下控制器,我需要找到各种动作的路线:

[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.

这里有什么问题?有没有办法列出所有可能的路线?或者确保注册了哪些控制器?

1 个答案:

答案 0 :(得分:3)

仔细查看路线模板定义:

[Route("api/[controller]/[action]")]

它有一个api/字符串前缀(const),因此MVC中间件专家请求

http://localhost:55556/api/User/Get

http://localhost:55556/User/Get

另外,如果在REST范围内讨论,使用User/GETUser/POST等路由是个坏主意。为此,相应的HTTP方法(Gey,Post,Put, ......)被定义和使用。换句话说,您现在有一个冗余重复,因为请求,例如,来自curl的请求如下所示:

curl -X GET 'http://localhost:55556/User/Get`