【问题标题】:Why doesn't my named route work?为什么我的命名路线不起作用?
【发布时间】:2015-05-20 13:05:06
【问题描述】:

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

<a href="@Url.RouteUrl(routeName: "myroute",  routeValues: new { code = "123" })">this link</a>

在 Home 控制器中:

[Route("Home/DoIt", Name = "myroute"), HttpGet]
public ActionResult DoIt(string code)
{
  return View();
}

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”的路由。 参数名称:名称

但我得到了:

找不到资源。说明:HTTP 404。你的资源 正在寻找(或其依赖项之一)可能已被删除, 已更改名称,或暂时不可用。请查阅 以下 URL 并确保其拼写正确。

请求的 URL:/Home/DoIt

我做错了什么?

编辑:显然,我在 Route 属性上做错了,因为即使这样也不起作用:

  [Route("DoIt")]

[Route("Home/DoIt")]

无论请求 URL 是 http://localhost/Home/DoIt 还是 http://localhost/DoIt,两者都给我 404

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5 url-routing asp.net-mvc-routing attributerouting


    【解决方案1】:

    您放置MapMvcAttributeRoutes 行的顺序 很重要。你把它放在错误的位置。必须在默认路由之前调用。

    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,并有效地覆盖这些长度的任何属性路由。

    参考:http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx#enabling-attribute-routing

    【讨论】:

      【解决方案2】:

      您是否尝试过直接从浏览器访问您的操作?我的意思是YourHost/Home/DoIt。如果它还引发 404 错误,那么您的问题可能来自您的路由配置。

      也许您没有启用路由属性配置。检查以下内容: 来自 MSDN:

      要启用属性路由,请在期间调用 MapMvcAttributeRoutes 配置。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-06
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 2015-04-29
        相关资源
        最近更新 更多