Asp.net mvc 如何为两个控制器映射相同的路由?
我的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(
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}