自写的一个站点带登录验证页面,访问首页的时候遇到错误如下: HTTP Error 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求。
原因就是请求的字符串带了过长的参数。我的程序是写了登录验证页面。经过多次排查,才恍然大悟,我的登录页面没有开绿灯导致一直死循环被重定向。于是我在登录页面上加了[AllowAnonymous]后一切正常。

错误信息:

错误页面

    [AllowAnonymous]
    public class AccountModel : PageModel
    {
        public void OnGet()
        {
        }

        public IActionResult OnPost(string email,string password)
        {
            // 登录验证
            return RedirectToPage("Index");
        }
    }

更多信息可查看右侧近期文章。里面有详细介绍。

报错原因

HTTP 404.15:请求筛选模块拒绝了查询字符串过长的请求。本例的真实原因是登录页未放行,导致"未登录 → 重定向到登录页 → 又被拦截"的死循环,返回地址不断叠加,URL 越滚越长。

解决办法

  • 在登录页(PageModel 或 Controller)上添加 [AllowAnonymous],跳出重定向循环。
  • 检查全局授权过滤器是否把登录页也纳入拦截范围。
  • 如确有超长查询串需求,可在 web.config 中调整 requestLimits 的 maxQueryString 值。

相关阅读

参考资料