点击ForgetPassword链接跳转异常,页面内容不显示求助
解决ASP.NET MVC中ForgetPassword页面被重定向到Login的问题
你的问题核心在于web.config的URL授权配置优先级高于MVC的[AllowAnonymous]特性:虽然你给Account控制器标记了[AllowAnonymous],但web.config里的<deny users="?" />会先拦截所有匿名请求,直接重定向到Login页面,导致请求根本没到达ForgetPassword action。
解决方案1:通过web.config的location节点允许指定路径匿名访问
在web.config的<configuration>节点下,添加针对需要匿名访问路径的location配置,覆盖全局授权规则:
<!-- 允许匿名访问忘记密码页面 --> <location path="Account/ForgetPassword"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> <!-- 必须保留登录页的匿名访问,否则会陷入重定向死循环 --> <location path="Account/Login"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
解决方案2:改用MVC全局授权过滤器(推荐)
这种方式更贴合MVC的设计逻辑,移除web.config的全局授权配置,改用过滤器控制访问:
- 删除web.config中的以下内容:
<authorization> <deny users="?" /> </authorization>
- 在
App_Start/FilterConfig.cs中添加全局AuthorizeAttribute,让所有action默认需要登录,仅标记[AllowAnonymous]的action允许匿名访问:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); // 全局授权:所有请求默认需要登录 filters.Add(new AuthorizeAttribute()); } }
额外检查项
- 确认ForgetPassword action的
[AllowAnonymous]特性拼写正确,无笔误:
[AllowAnonymous] public ActionResult ForgetPassword() { return View(); }
- 检查页面源码中生成的链接是否正确,确认
Url.Action输出的href为/Account/ForgetPassword
内容的提问来源于stack exchange,提问作者CitrusBoy
相关产品推荐
相关产品推荐

