如何删除路由中的额外路由值?ASP.NET路由配置求助
ASP.NET路由重定向解决方案
你的问题出在当前路由配置允许URL包含额外段时仍匹配到目标页面——MVC路由系统会自动忽略超出路由定义的URL部分,所以PartnerAdmin/Account/RetrievePassword/bla/bla依然会命中Account/RetrievePassword action。下面给你两种可行的解决方法:
方法一:添加精确匹配+捕获重定向路由
在现有默认路由之前添加精确匹配路由,确保只有正确格式的URL能命中目标页面;再添加一个捕获所有额外段的路由,将错误URL重定向到正确地址:
// 1. 精确匹配路由:仅当URL完全匹配时才命中 context.MapRoute( name: "RetrievePassword_Exact", url: "PartnerAdmin/Account/RetrievePassword", defaults: new { controller = "Account", action = "RetrievePassword" } ); // 2. 保留原有的默认路由 context.MapRoute( name: "Partner_default", url: "PartnerAdmin/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); // 3. 捕获所有带额外段的错误URL,重定向到正确页面 context.MapRoute( name: "RetrievePassword_Redirect", url: "PartnerAdmin/Account/RetrievePassword/{*extra}", defaults: new { controller = "Account", action = "RedirectToRetrievePassword" } );
然后在AccountController中添加重定向用的action:
public ActionResult RedirectToRetrievePassword() { // 使用301永久重定向(若需临时重定向可换RedirectToAction) return RedirectToActionPermanent("RetrievePassword"); }
方法二:在目标Action内直接检查并重定向
如果不想新增路由,可在RetrievePassword方法内判断URL是否包含额外段,若有则直接重定向:
public ActionResult RetrievePassword() { // 检查URL段数是否超过预期(正确URL应为4段:域名/PartnerAdmin/Account/RetrievePassword) if (Request.Url.Segments.Length > 4) { // 构造正确URL并执行永久重定向 var correctUrl = Url.Action("RetrievePassword", "Account", null, Request.Url.Scheme); return RedirectPermanent(correctUrl); } // 原页面逻辑 return View(); }
内容的提问来源于stack exchange,提问作者shubham maini
相关产品推荐
相关产品推荐

