Asp.net mvc 自定义路由在MVC中不起作用

Asp.net mvc 自定义路由在MVC中不起作用,asp.net-mvc,Asp.net Mvc,我正在创建一个友好的URL,所以我在routeconfig文件中创建了一个路由,如下所示 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controlle

我正在创建一个友好的URL,所以我在routeconfig文件中创建了一个路由,如下所示

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Auth", action = "LogIn", id = UrlParameter.Optional }
        );
        routes.MapRoute(
          name: "ShowUser",                                              // Route name
           url: "{controller}/{action}/{id}",                           // URL with parameters
           defaults: new { controller = "UserGroupEdit", action = "Index", id = UrlParameter.Optional }  // Parameter defaults
        );
    }
  <a href="@Url.Action( "Index", "ShowUser")" onclick="javascript:onBegin()">View</a>
和行动链接如下

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Auth", action = "LogIn", id = UrlParameter.Optional }
        );
        routes.MapRoute(
          name: "ShowUser",                                              // Route name
           url: "{controller}/{action}/{id}",                           // URL with parameters
           defaults: new { controller = "UserGroupEdit", action = "Index", id = UrlParameter.Optional }  // Parameter defaults
        );
    }
  <a href="@Url.Action( "Index", "ShowUser")" onclick="javascript:onBegin()">View</a>


但如果出现运行时错误“找不到资源”,则无法正常工作。

默认路由和自定义路由具有相同的结构,因此将始终使用默认路由,因为它是先声明的。 我猜您会遇到错误,因为在代码中您指的是ShowUser,但您应该使用控制器的名称:UserGroupEdit

<a href="@Url.Action( "Index", "UserGroupEdit")" onclick="javascript:onBegin()">View</a>

如果你想要一条友好的路线,你可以这样做

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

    routes.MapRoute(
      name: "ShowUser",                                              // Route name
       url: "ShowUser/index/{id}",                           // URL with parameters
       defaults: new { controller = "UserGroupEdit", action = "Index", id = UrlParameter.Optional }  // Parameter defaults
    );

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

}
在您的
cshtml

@Url.Action( "Index", "UserGroupEdit")

您可以使用
UrlHelper.RouteUrl
helper方法,该方法允许您指定路由名称:

<a href="@Url.RouteUrl("ShowUser", new { action = "Index" })" onclick="javascript:onBegin()">View</a>

参考

您遇到了什么错误?“/”应用程序中的服务器错误。找不到资源。描述:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确。请求的URL:/ShowUser/IndexDefault路由应该可以工作,即使您访问自定义路由的方式不正确。确保
RouteConfig.RegisterRoutes(RouteTable.Routes)位于
应用程序启动
事件中。您可以展示控制器和操作方法吗?以下是名称“UserGroupEditController”行动是Index@C.jacking回答是否回答了您的问题?没有。实际上,我的要求是在URL栏中提供用户友好的URL而不是UserGroupEdit/Index。它必须在栏中显示ShowUser/Index。@C.jacking请参见上面的回答以获取解决方案您可以使用Route属性:place[Route(“ShowUser”)]对于想要的操作和as链接,使用@OgnjenBabic建议看起来不错,但仍然不起作用。找不到资源。描述:HTTP 404否实际上我的要求是在URL栏中提供用户友好的URL而不是UserGroupEdit/Index,它必须在栏中显示ShowUser/Index。如果我提供的URL选项显示“ShowUser/Index”如果我重命名控制器名称,那么我需要在多个位置进行更改,这就是为什么我使用自定义URL更新了应答器,但应答器仍然不工作。它正在“/”应用程序中生成“”和错误加载页面“服务器错误。找不到资源。”请按上面所示更新routeconfig。您还可以使用
Route
属性来实现您要查找的内容。看看@Win的答案