You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击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的全局授权配置,改用过滤器控制访问:

  1. 删除web.config中的以下内容:
<authorization>
  <deny users="?" />
</authorization>
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:47:18