Asp.net core CORS飞行前请求不';在fiddler工作之前不要点击IIS
是的,这是CORS的另一个问题,我已经为这个问题搜索了三天多,试图了解发生了什么 在此回购协议下找到的示例应用程序Asp.net core CORS飞行前请求不';在fiddler工作之前不要点击IIS,asp.net-core,iis,cors,fiddler,preflight,Asp.net Core,Iis,Cors,Fiddler,Preflight,是的,这是CORS的另一个问题,我已经为这个问题搜索了三天多,试图了解发生了什么 在此回购协议下找到的示例应用程序 我使用的是本地IIS中托管的ASP.net Core 2.2,启用了Windows身份验证,禁用了匿名身份验证。 配置为允许CORS services.AddCors(options => { options.AddPolicy("AllowOrigin", builder =&
- 我使用的是本地IIS中托管的ASP.net Core 2.2,启用了Windows身份验证,禁用了匿名身份验证。
配置为允许CORS
services.AddCors(options => { options.AddPolicy("AllowOrigin", builder => builder .SetIsOriginAllowed(origin => true) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials() ); });
- 为了处理飞行前的请求,我创建了自定义中间件
private Task BeginInvoke(HttpContext context) { if (context.Request.Method == "OPTIONS") { if (!string.IsNullOrEmpty( context.Request.Headers["Origin"]) ) context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { (string)context.Request.Headers["Origin"] }); context.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "foo,Access2, Origin, X-Requested-With, Content-Type, Accept,authentication" }); context.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" }); context.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" }); context.Response.StatusCode = 200; return Task.CompletedTask; //context.Response.WriteAsync("OK"); } return _next.Invoke(context); //complete request pipline }
- 当我尝试发送带有客户标头的复杂请求时(飞行前请求)(请求a)
- 最有趣的事情是激活fiddler然后创建一个从浏览器(chrome)到端点的简单get请求http://localhost:8050/api/values),它将产生三次身份验证握手并成功
- 然后,如果我再次尝试复杂的请求(请求A)(这在第一次时导致了一个错误),那么作为两个请求,它将不会出现任何问题
我已经找到了问题的解决方案:我认为这是关于IIS CORS模块的 IIS中的CORS 部署到IIS时,如果服务器未配置为允许匿名访问,则必须在Windows身份验证之前运行CORS。若要支持此方案,需要为应用安装和配置IIS CORS模块 通过从安装IIS CORS模块 用于IIS CORS模块文档
感谢您的支持没有这个模块,没有太多的讨论。您考虑过chrome浏览器的原因吗?您尝试过其他浏览器吗?如果您向chrome添加一些cors扩展,它可能会解决这个问题。如果您想在asp.net core中启用cors,您可以参考以下链接:。@LexLi但我想处理cors抛出的问题e ASP.NET应用程序不是我的IIS服务器?您想要的是不现实的。请阅读该博客文章中的“使用Windows身份验证”以了解更多信息。
fetch('http://localhost:8050/api/values',{credentials:'include', headers:{'foo':'foo'}})
.then(response => response.json())
.then(data => console.log(data));