C# asp.net核心信号器中的跨源请求被阻止?
我正在asp.net核心信号器上工作。我想进行跨域请求。我有一个javascript客户端,当我连接到跨域signalR hub时,下面的错误显示, CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头 Javascript客户端代码C# asp.net核心信号器中的跨源请求被阻止?,c#,asp.net-core,asp.net-core-signalr,C#,Asp.net Core,Asp.net Core Signalr,我正在asp.net核心信号器上工作。我想进行跨域请求。我有一个javascript客户端,当我连接到跨域signalR hub时,下面的错误显示, CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头 Javascript客户端代码 var connection = new signalR.HubConnectionBuilder().withUrl("https://localhost:44373/
var connection = new signalR.HubConnectionBuilder().withUrl("https://localhost:44373/chatHub?token="+12).build();
跨域信号机项目中的启动类
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
{
builder
.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins("*")
.AllowCredentials();
}));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddCors();
services.AddSignalR();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
//app.UseCors(builder =>
//{
// builder.WithOrigins("*")
// .AllowAnyHeader()
// .AllowAnyMethod()
// //.WithMethods("GET", "POST")
// .AllowCredentials();
//});
// ... other middleware ...
// app.UseCors("CorsPolicy");
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
public void配置服务(IServiceCollection服务)
{
配置(选项=>
{
//此lambda确定给定请求是否需要非必要cookie的用户同意。
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.None;
});
services.AddCors(options=>options.AddPolicy(“CorsPolicy”,builder=>
{
建设者
.AllowAnyMethod()
.AllowAnyHeader()
.带原产地(“*”)
.AllowCredentials();
}));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddCors();
services.AddSignalR();
}
//此方法由运行时调用。使用此方法配置HTTP请求管道。
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Error”);
//默认的HSTS值为30天。您可能希望在生产场景中更改此值,请参阅https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
//app.UseCors(builder=>
//{
//建筑商。带原产地(“*”)
//.AllowAnyHeader()
//.AllowAnyMethod()
////.WithMethods(“获取”、“发布”)
//.AllowCredentials();
//});
//…其他中间件。。。
//附录UseCors(“公司政策”);
app.usesigner(路由=>
{
routes.MapHub(“/chatHub”);
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
在您的startup类中,取消对以下行的注释//app.UseCors(“CorsPolicy”)代码>
您已经在ConfigureServices()
方法中构建了策略,现在您需要告诉应用程序在Configure()
方法中使用该策略
编辑:
作为对您评论的回应,如果您希望在CORS政策中允许任何来源,
将.WithOrigins(“*”)
替换为.AllowAnyOrigin()
。您有两个服务。AddCors
调用,这是必要的吗?我只使用了一个服务。AddCors()您有两个调用,一个在服务的上方和下方。AddMvc()。
方法。O是的,不,我没有这两个调用,但现在,它给出了以下错误,CORS策略已阻止从源站“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:当请求的凭据模式为“包括”时,响应中“访问控制允许源站”标头的值不得为通配符“*”。XMLHttpRequest启动的请求的凭据模式由withCredentials属性控制。如错误所述。不要在allowOrigins中使用通配符。您应该指定允许哪些来源好的,在移动客户端的情况下我们会怎么做?来源是什么?来源将在来源标题下的请求中指定。Mobile不会检查cors,除非它是webview。对于测试阶段的桌面浏览器,请使用cors chrome扩展