我的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")
答案 0 :(得分:1)
您的默认路线应自动满足您想要导航到index
而无需网址的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
而不是Car
如果它不适用于某些URL,则可能是路由处理程序匹配不同的路由 - 我相信它 取决于您注册它们的顺序
你可以使用一个好的路由调试插件
https://www.nuget.org/packages/routedebugger/
它为您提供所有路线的摘要以及与当前网址匹配的路线 - 非常有用
答案 1 :(得分:1)
如果不引入其他套餐,您只需添加其他路线即可。要创建新路线,首先必须定义您想要的URL。在这种情况下,您已经说过您希望能够转到用户控制器上的/Login
。好的 - 让我们创建一条新路线。此路线应位于 ABOVE 您的默认路线。
routes.MapRoute(
"UserLogin",
"Login/{id}",
new { controller = "User", action="Login", id = UrlParameter.Optional }
);
第一个参数只是路径名。第二个参数是我希望此路由匹配的URL的格式。鉴于我们知道要与此路由匹配的操作,我们不需要默认路由中的{action}
或{controller}
catchall占位符。另请注意,我们可以声明此路由将命中的控制器,而无需在URL中指定控制器。
最后请注意,如果您永远不会将ID参数传递给该函数,则不必将{id}
作为路径的一部分。如果是这种情况,那么您可以安全地删除UserLogin路由中对id
的任何引用。
当我重新阅读您的问题时,您应该能够为其他一些示例执行此操作。我们将使用/About
网址并演示删除{id}
参数。
routes.MapRoute(
"AboutUsPage",
"About",
new { controller = "Home", action="About"}
);
答案 2 :(得分:1)
这非常简单。您只需为每个预期的网址创建路线。
请注意,如果您未将控制器或操作作为网址占位符传递,则需要手动将其作为默认值提供。
routes.MapRoute(
"Blog",
"Blog/{id}",
new { controller = "Home", action = "Blog", id = UrlParameter.Optional }
);
routes.MapRoute(
"Login",
"Login/{id}",
new { controller = "User", action = "Login", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);