【问题标题】:MVC Request did not match any routesMVC 请求不匹配任何路由
【发布时间】:2017-12-22 22:43:23
【问题描述】:

我有以下控制器,我需要在其中找到各种操作的路线:

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

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

【问题讨论】:

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


【解决方案1】:

更仔细地查看你的路由模板定义:

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

【讨论】:

  • 谢谢。这对我来说是一个非常令人尴尬的错误。这个问题可以删除,因为它不是一个真正的问题。
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
相关资源
最近更新 更多