ASP.NET MVC如何修改Route Config将注册页访问地址改为/Reg?
问题根源
你当前同时混用了全局约定路由和特性路由两类路由规则,且未正确配置路由顺序/开启对应路由功能,导致自定义路由未生效。
疑问解答
- 是否需要在对应Action上方标注
[Route("Reg")]特性?
仅使用特性路由方案时需要标注,仅使用全局约定路由方案时不需要标注,不要两类路由同时配置同一规则,避免冲突。 - 是否需要配置重定向才能实现该需求?
仅需要/Reg可访问注册页时不需要配置重定向;如果需要原/account/register/*格式的旧地址自动跳转至/Reg,才需要额外配置重定向规则。 - 是否需要修改web.config相关设置?
默认场景下不需要修改web.config,仅当你需要用到IIS URL重写模块的特殊规则时才需要调整对应配置。
解决方案
选择以下任意一种方案即可,不要混用两类路由配置。
方案1:仅使用全局约定路由
- 删掉Register Action上的
[Route("Reg")]特性 - 确保自定义路由规则放在默认路由规则之前(路由按从上到下的顺序匹配,优先触发第一个符合的规则)
完整RegisterRoutes代码示例:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 自定义路由放在最前面 routes.MapRoute( name: "Register", url: "Reg", defaults: new { controller = "Account", action = "Register", id = UrlParameter.Optional }, namespaces: new[] { "WebSite.Controllers" } ); routes.MapRoute( name: "AccountReg", url: "Account/Reg", defaults: new { controller = "Account", action = "Register", id = UrlParameter.Optional }, namespaces: new[] { "WebSite.Controllers" } ); // 默认路由放在最后 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
方案2:仅使用特性路由
- 删掉你之前配置的两个自定义
MapRoute规则 - 在RegisterRoutes方法开头添加特性路由开启代码
- 保留Action上的路由特性,需要多地址访问可叠加标注特性
Action代码示例:
[AllowAnonymous] [Route("Reg")] [Route("Account/Reg")] // 可选,需要同时支持/Account/Reg访问时添加 public virtual ActionResult Register(int? id = null) { // 如果需要旧地址自动跳转,可添加以下代码 if (Request.Url.AbsolutePath.ToLower().StartsWith("/account/register")) { return RedirectPermanent("/Reg"); } return View(); }
RegisterRoutes代码示例:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 开启特性路由 routes.MapMvcAttributeRoutes(); // 默认路由放在最后 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
额外说明
如果你的Register方法需要接收参数,可对应调整路由规则的url配置,比如将url设置为Reg/{id}即可适配带参数的访问地址。
内容的提问来源于stack exchange,提问作者farzaneh___
相关产品推荐
相关产品推荐

