【问题标题】:ASP.NET MVC 5 not seeing "{id}" route in controllerASP.NET MVC 5 在控制器中看不到“{id}”路由
【发布时间】:2016-12-18 11:01:47
【问题描述】:

我在 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 not found 错误。我尝试将路线更改为~/{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。

【问题讨论】:

  • 看起来你的路由应该是 users/getuser/1。换句话说,你错过了行动部分或你的路线。

标签: asp.net asp.net-mvc


【解决方案1】:

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

更新:我还需要添加 RoutePrefix 以使路由正常工作,并且我必须为任何有参数的操作显式添加正确的路由。可惜MVC不能自己映射。

【讨论】:

    【解决方案2】:

    在 getuser 上使用您的附加 ID 路由 - 这不是必需的。

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

    【讨论】:

    • “不正确”是什么意思?我希望我的路线是 users/1 而不是 users/getuser/1
    • Users 是控制器,getuser 是动作。你需要两者。对于最新的,您调用控制器用户和最新的操作:users/newest,对于 getuser 也是一样的:users/getuser。因为您还发送了 id,所以它变成了 users/getuser/1。我想当它以前工作时,它只是默认为 getuser,而不是设计使然。试一试!
    • 我没有说它不起作用。我希望我的路线是users/1。它可能有效,但我不想使用users/getuser/1,因为它作为 URL 没有意义。无论如何,我已经通过添加我在自己的答案中所述的路线来实现它。
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多