在Startup.cs添加Mvc授权配置后出现HTTP Error 404.15请求过长错误
解决添加Mvc全局授权后出现HTTP Error 404.15的问题
嘿,我来帮你搞定这个问题!你在Startup.cs里添加了这段全局强制授权的Mvc配置后:
services.AddMvc(x => { var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build(); x.Filters.Add(new AuthorizeFilter(policy)); }).AddXmlSerializerFormatters();
遇到了**HTTP Error 404.15 - Not Found(请求筛选模块拒绝查询字符串过长的请求)**的错误,对吧?
问题根源
这个错误的核心原因是:当未登录的用户访问需要授权的页面时,系统会自动重定向到登录页,并且把原请求的Url作为ReturnUrl参数附加到登录请求的查询字符串里。如果原请求本身的查询字符串就很长,加上ReturnUrl编码后的内容,总长度会超过IIS默认允许的查询字符串长度(默认是2048字符),于是就触发了这个拒绝请求的错误。
可行的解决方案
我给你几个实用的解决办法,你可以根据自己的场景选择:
调整IIS的查询字符串长度限制
直接在项目的web.config中添加或修改<requestFiltering>配置,增大允许的查询字符串长度:<system.webServer> <security> <requestFiltering> <requestLimits maxQueryString="32768" /> <!-- 数值可以按需调整,比如设为32768足够应对大部分场景 --> </requestFiltering> </security> </system.webServer>修改完记得重启IIS站点或者调试会话,让配置生效。
优化登录重定向的返回Url处理
如果你不想修改IIS的全局限制,可以自定义Cookie认证的重定向逻辑,避免把超长的原Url全部附加到登录请求里。比如只保留原请求的路径部分,忽略多余的查询参数:services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Account/Login"; // 你的登录页路径 options.Events = new CookieAuthenticationEvents { OnRedirectToLogin = context => { // 只保留原请求的路径,去掉超长的查询参数 var cleanReturnUrl = Uri.EscapeDataString(context.Request.Path.ToString()); context.Response.Redirect($"{options.LoginPath}?ReturnUrl={cleanReturnUrl}"); return Task.CompletedTask; } }; });从根源优化请求参数
排查一下触发错误的请求,看看是不是有不必要的超长查询参数。如果有的话,尽量改用POST请求传递数据,或者精简参数内容,从根本上缩短查询字符串的长度。
内容的提问来源于stack exchange,提问作者Zargham Nazeer Malik
相关产品推荐
相关产品推荐

