Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何为两个控制器映射相同的路由?_Asp.net Mvc_Asp.net Mvc 4_Model View Controller_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 如何为两个控制器映射相同的路由?

Asp.net mvc 如何为两个控制器映射相同的路由?,asp.net-mvc,asp.net-mvc-4,model-view-controller,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 4,Model View Controller,Asp.net Mvc Routing,我的MVC应用程序中有两个控制器。一个是Home控制器,另一个是User控制器。我正在使用以下RouteConfig设置 routes.MapRoute( "actiononly", "{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute(

我的MVC应用程序中有两个控制器。一个是
Home
控制器,另一个是
User
控制器。我正在使用以下RouteConfig设置

routes.MapRoute(
            "actiononly",
            "{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
我想要abc.com/Blog
abc.com/Login
而不是abc.com/Home/Blog
abc.com/User/Login
。 上述配置适用于
abc.com/Blog
,但不适用于
abc.com/Login
。 如何从两个控制器的链接中删除控制器名称? 另外,我如何在网站启动时只显示
abc.com
,而不显示
abc.com/index
?我在我的网页中使用以下代码访问特定页面

@Html.ActionLink("Home", "Blog", "Home")
@Html.ActionLink("Login", "Login", "User")

您的默认路线应自动满足导航到
abc.com
的需要,而不需要URL的
索引部分

您需要确保将主路线指定为默认路线:

context.MapRoute(
            "Site_Default",
            "{controller}/{action}/{*id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
如果你想绘制短路线图,你可以完全按照上面所做的去做。我在自己的项目中使用此助手功能来映射短路线:

void ShortRoute(string action, string controller)
{
    ShortRoute(action, controller, action);
}

void ShortRoute(string action, string controller, string route)
{
    _context.MapRoute(route, route, new { action, controller });
}
使用方法:

ShortRoute("About", "Home");
它允许我导航到
mywebsite.com/about
,而不是
mywebsite.com/home/about

如果对某些URL不起作用,则可能是路由处理程序正在匹配不同的路由-我相信这确实取决于您注册它们的顺序

有一个很好的路由调试插件可以使用


它为您提供了所有路线的摘要以及与当前URL匹配的路线-非常有用

您的默认路线应该自动满足您导航到
abc.com
的需要,而不需要URL的
索引部分

您需要确保将主路线指定为默认路线:

context.MapRoute(
            "Site_Default",
            "{controller}/{action}/{*id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
如果你想绘制短路线图,你可以完全按照上面所做的去做。我在自己的项目中使用此助手功能来映射短路线:

void ShortRoute(string action, string controller)
{
    ShortRoute(action, controller, action);
}

void ShortRoute(string action, string controller, string route)
{
    _context.MapRoute(route, route, new { action, controller });
}
使用方法:

ShortRoute("About", "Home");
它允许我导航到
mywebsite.com/about
,而不是
mywebsite.com/home/about

如果对某些URL不起作用,则可能是路由处理程序正在匹配不同的路由-我相信这确实取决于您注册它们的顺序

有一个很好的路由调试插件可以使用


它为您提供了所有路线的摘要以及与当前URL匹配的路线-非常有用

您的默认路线应该自动满足您导航到
abc.com
的需要,而不需要URL的
索引部分

您需要确保将主路线指定为默认路线:

context.MapRoute(
            "Site_Default",
            "{controller}/{action}/{*id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
如果你想绘制短路线图,你可以完全按照上面所做的去做。我在自己的项目中使用此助手功能来映射短路线:

void ShortRoute(string action, string controller)
{
    ShortRoute(action, controller, action);
}

void ShortRoute(string action, string controller, string route)
{
    _context.MapRoute(route, route, new { action, controller });
}
使用方法:

ShortRoute("About", "Home");
它允许我导航到
mywebsite.com/about
,而不是
mywebsite.com/home/about

如果对某些URL不起作用,则可能是路由处理程序正在匹配不同的路由-我相信这确实取决于您注册它们的顺序

有一个很好的路由调试插件可以使用


它为您提供了所有路线的摘要以及与当前URL匹配的路线-非常有用

您的默认路线应该自动满足您导航到
abc.com
的需要,而不需要URL的
索引部分

您需要确保将主路线指定为默认路线:

context.MapRoute(
            "Site_Default",
            "{controller}/{action}/{*id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
如果你想绘制短路线图,你可以完全按照上面所做的去做。我在自己的项目中使用此助手功能来映射短路线:

void ShortRoute(string action, string controller)
{
    ShortRoute(action, controller, action);
}

void ShortRoute(string action, string controller, string route)
{
    _context.MapRoute(route, route, new { action, controller });
}
使用方法:

ShortRoute("About", "Home");
它允许我导航到
mywebsite.com/about
,而不是
mywebsite.com/home/about

如果对某些URL不起作用,则可能是路由处理程序正在匹配不同的路由-我相信这确实取决于您注册它们的顺序

有一个很好的路由调试插件可以使用


它为您提供了所有路由以及哪些路由与当前URL匹配的摘要-非常有用

,无需引入额外的包,您只需添加额外的路由即可。要创建新路由,首先必须定义您希望URL是什么。在本例中,您说过希望能够转到用户控制器上的
/Login
。好的,让我们创建一条新路线。此路线应位于默认路线上方

routes.MapRoute(
            "UserLogin",
            "Login/{id}",
            new { controller = "User", action="Login", id = UrlParameter.Optional }
    );
第一个参数只是路由名称。第二个参数是我希望此路由匹配的URL的格式。如果我们知道要与此路由匹配的操作,则不需要
{action}
{controller}
捕获默认路由中的所有占位符。还请注意,我们可以声明此路由将命中哪个控制器,而无需在URL中指定控制器

最后请注意,如果永远不会向该函数传递id参数,则不必让
{id}
成为路由的一部分。如果是这种情况,那么您可以安全地删除UserLogin路由中对
id
的任何引用

当我重新阅读您的问题时,您应该能够对其他一些示例也这样做。让我们以
/About
URL为例,演示如何删除
{id}
参数

routes.MapRoute(
            "AboutUsPage",
            "About",
            new { controller = "Home", action="About"}
    );

在不引入额外包的情况下,您只需添加额外的路由。要创建新路由,首先必须定义您希望URL是什么。在本例中,您说过希望能够转到用户控制器上的
/Login
。好的,让我们创建一条新路线。此路线应位于默认路线上方

routes.MapRoute(
            "UserLogin",
            "Login/{id}",
            new { controller = "User", action="Login", id = UrlParameter.Optional }
    );
第一个参数只是路由名称。第二个参数是我希望此路由匹配的URL的格式。如果我们知道要匹配此路由的操作,则不需要
{action}