我有一个相同的域,其中之一是没有前缀www的域。例如,
第一个域可以正常工作,因为它是默认域。但是当我执行CRUD或访问任何api服务时,第二个错误给了我。
在以下位置访问XMLHttpRequest 原产地的“ https://www.example.com/hubCon/negotiate” “ https://example.com”已被CORS政策屏蔽:对 预检请求未通过访问控制检查: 响应中的“ Access-Control-Allow-Origin”标头不得为 当请求的凭据模式为“包括”时,使用通配符“ *”。的 XMLHttpRequest发起的请求的凭据模式为 由withCredentials属性控制。
我尝试了文章published by Microsoft中的代码,但是它不起作用。
我正在使用.Net Core 2.2版本。 这是我的Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("https://example.com")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin()
.AllowCredentials();
});
});
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseCors(MyAllowSpecificOrigins);
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseHttpsRedirection();
app.UseStatusCodePages();
app.UseStaticFiles();
app.UseAuthentication();
app.UseSignalR(routes =>
{
routes.MapHub<HubSignal>("/hubCon");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}"
);
});
}
所以,我不明白为什么项目会出错。
感谢您的回答。
答案 0 :(得分:1)
您不能将AllowAnyOrigin与AllowCredentials一起使用。以下是一个允许通配符域带有CORS的示例。
此代码在ConfigureServices中:
services.AddCors(options =>
{
options.AddPolicy("_AllowOrigin",
builder => builder
.SetIsOriginAllowedToAllowWildcardSubdomains()
.WithOrigins("https://localhost:44385", "https://*.azurewebsites.net", "http://*.azurewebsites.net")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
);
});
别忘了在控制器中装饰动作:
[EnableCors("_AllowOrigin")]
答案 1 :(得分:0)
发生这种情况是因为您同时指定了两者:
不支持此配置。参见doc:
指定AllowAnyOrigin和AllowCredentials是不安全的配置,可能会导致跨站点请求伪造。当同时使用两种方法配置应用程序时,CORS服务将返回无效的CORS响应。
您应该删除对AllowAnyOrigin方法的调用