假设我有一个网站 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(name:“Home”,url:“Home / / ”,默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional});
routes.MapRoute(name:“Settings”,url:“Settings / / ”,默认值:new {controller =“Settings”,action =“Index”,id = UrlParameter.Optional});
routes.MapRoute(name:“companyname”,url:“”,默认值:new {controller =“Login”,action =“Index”,id = UrlParameter.Optional});
routes.MapRoute(name:“default”,url:“ / / ”,默认值:new {controller =“Login”,action =“Index”,id = UrlParameter.Optional});
这将工作,但我有很多控制器,如果我将来添加一个,忘记调整路线,它将失败 . 这也不太可能,但如果一个公司名称与我的一个控制器名称相同,那么它也会失败 .
3 回答
在控制器中,您可以重定向到另一个控制器/操作:
您是否尝试过首先添加此映射:
这应该有效,但请记住,路线是经过精确评估的,因此您必须组织映射才能覆盖您网站中的所有网页 .
例如,www.example.com/Product等路线可能会被错误地重定向到/登录 .
编辑:您可以添加约束,因此如果id是一个int值,您可以尝试使用以下内容:
编辑2:将id作为字符串值,我看到的唯一解决方案是按照你的说法手动添加每个控制器,或者添加如下内容:
);
这样,您将来不需要更新每条路线 .
请尝试以下路由
删除其他控制器特定路由 . 现在,您可以使用URL导航到登录: - www.example.com/companylogin/和所有其他URL重定向默认路由 .