假设我有一个网站www.example.com
默认路由看起来像
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
好的,工作正常但是当我转到www.example.com/id
转到www.example.com/login/index/id
如何为此配置/添加路由,而不会破坏我实际尝试转到www.example.com/controller
的其他页面?
编辑:不幸的是,id是一个字符串,所以我没有任何具体的约束,我能想到它会起作用。想想也许而不是id我应该说公司名称或网站名称,所以网址看起来像www.example.com/companyname。
到目前为止,我提出的唯一解决方案是为我的每个控制器添加一个maproute
routes.MapRoute( 名称:“家”, url:“Home / {action} / {id}”, 默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional} );
routes.MapRoute( 名称:“设置”, url:“设置/ {动作} / {id}”, 默认值:new {controller =“Settings”,action =“Index”,id = UrlParameter.Optional} );
routes.MapRoute( 名称:“companyname”, url:“{id}”, 默认值:new {controller =“Login”,action =“Index”,id = UrlParameter.Optional} );
routes.MapRoute( 名称:“默认”, url:“{controller} / {action} / {id}”, 默认值:new {controller =“Login”,action =“Index”,id = UrlParameter.Optional} );
这会有效,但我有很多控制器,如果我将来添加一个控制器而忘记调整路径,它将会失败。这也不太可能,但如果一个公司名称与我的一个控制器名称相同,那么它也会失败。
答案 0 :(得分:0)
在控制器中,您可以重定向到另一个控制器/操作:
public ActionResult yourAction()
{
return RedirectToAction("nameAction","nameController");
}
答案 1 :(得分:0)
您是否尝试过首先添加此映射:
routes.MapRoute( name: "Custom", url: "{id}", defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional } );
这应该有用,但请记住,路线是经过精心评估的,因此您必须组织映射才能覆盖您网站中的所有网页。
例如,www.example.com/Product等路线可能被错误地重定向到/登录。
编辑:您可以添加约束,因此如果id是int值,您可以尝试使用以下内容:
routes.MapRoute("Custom", "{id}",
new { controller = "Login", action = "Index" },
new { id = @"\d+" }
编辑2:将id作为字符串值,我看到的唯一解决方案是按照你的说法手动添加每个控制器,或者添加如下内容:
routes.MapRoute(
name: "Default",
url: "app/{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
这样您将来不需要更新每条路线。
答案 2 :(得分:0)
请尝试以下路由
routes.MapRoute(name: "companylogin", url: "companylogin/{id}", defaults: new
{
controller = "Login",
action = "Index",
id = UrlParameter.Optional
});
routes.MapRoute(name: "default", url: "{controller}/{action}/{id}", defaults: new
{
controller = "Login",
action = "Index",
id = UrlParameter.Optional
});
删除其他控制器特定的路由。现在您可以导航到使用登录 网址:-www.example.com/companylogin/{id}和所有其他网址重定向默认路由。