Asp.net mvc 为什么';这不是我指定的路线吗?

Asp.net mvc 为什么';这不是我指定的路线吗?,asp.net-mvc,asp.net-mvc-5,url-routing,asp.net-mvc-routing,attributerouting,Asp.net Mvc,Asp.net Mvc 5,Url Routing,Asp.net Mvc Routing,Attributerouting,标准MVC 5模板。 因此,我试图理解并创建一个命名路由,如下所示: <a href="@Url.RouteUrl(routeName: "myroute", routeValues: new { code = "123" })">this link</a> MvcAttributeRouting当然在RoutConfig.cs中启用: public static void RegisterRoutes(RouteCollection routes) { rout

标准MVC 5模板。
因此,我试图理解并创建一个命名路由,如下所示:

<a href="@Url.RouteUrl(routeName: "myroute",  routeValues: new { code = "123" })">this link</a>
MvcAttributeRouting当然在RoutConfig.cs中启用:

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 }
  );
  routes.MapMvcAttributeRoutes();
}
因为如果未启用,将获得:

在路由集合中找不到名为“myroute”的路由。 参数名称:name

但我得到了:

找不到资源。描述:HTTP404。你需要的资源 正在查找的(或其依赖项之一)可能已被删除, 其名称已更改,或暂时不可用。请复习 请输入以下URL并确保其拼写正确

请求的URL:/Home/DoIt

我做错了什么

编辑:显然,我对Route属性做了一些错误的处理,因为即使这样也不起作用:

  [Route("DoIt")]

两者都给我404,不管请求URL是什么,或者放置
mapmvcatteroutes
行的顺序是很重要的。你把它放错地方了。必须在默认路由之前调用它

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

        // Add this to get attribute routes to work
        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
路由的工作原理类似于switch case语句。第一场比赛获胜。但如果您将默认路由放在第一位,它将使用0、1、2或3个段匹配每个URL,并有效地覆盖这些长度的任何属性路由


参考资料:

您是否尝试过直接从浏览器访问您的操作?我是说你的主人/家/工作。如果它还引发404错误,那么您的问题可能来自路由配置

可能您没有启用路由属性配置。检查以下各项: 从MSDN:

要启用属性路由,请在 配置

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

        // Add this to get attribute routes to work
        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();
    }
}