ASP.NET MVC 5没有看到" {id}"控制器中的路由

时间:2016-12-18 11:01:47

标签: asp.net asp.net-mvc

我在Visual Studio 2015 Update 3中创建了一个新的ASP.NET MVC 5项目,一切都非常标准。我有这个控制器:

public class UsersController : BaseController
{
    [HttpGet]
    public async Task<ActionResult> Newest()
    {
        var newestUsers = await Database.Users.OrderByDescending(u => u.ID).Take(100).ToListAsync();
        return View(newestUsers);
    }

    [HttpGet]
    [Route("{id}")]
    public async Task<ActionResult> GetUser(long id)
    {
        var user = await Database.Users.FindAsync(id);
        return View(user);
    }
}

我的BaseController来自常规MVC Controller,它包含我应用的一些常见属性。没什么特别的。

当我转到/users/newest时,会加载相应的页面,但是当我转到/users/1时,我会立即收到404找不到的错误。我已尝试将路线更改为~/{id},但无济于事。我的路线配置是标准的,自动生成的,我无法触及它:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

为什么没有点击GetUser行动?

更新:由于某种原因,它开始无法再次运行。我什么都没做。在我添加routes.MapMvcAttributeRoutes();之后,它仍在工作,它仍在那里,但我又开始获得404。

2 个答案:

答案 0 :(得分:1)

好吧我不知道它是如何消失的(或者它为什么不存在)但我错过了路由配置中的routes.MapMvcAttributeRoutes();方法。添加该方法解决了这个问题。

更新:我还需要添加RoutePrefix以使路由正常工作,并且我必须为具有参数的任何操作显式添加正确的路由。遗憾的是MVC无法自己映射它们。

答案 1 :(得分:-1)

在getuser之上获取额外的Id路由 - 这不是必需的。

您的路线不正确 - 应该是users / getuser / 1