如何解决 IIS 服务器上的 cors 错误
How to troubleshoot cors error on IIS server
我正在开发一个应用程序,其后端是带有 SignalR 的网络核心 API,前端是 Angular。在我的计算机上调试它按预期工作但是当我在服务器上发布时它显示 Cors 错误,即使在 startup.cs.
上启用它们也是如此
这是我收到的错误:
CORS 策略已阻止从来源 'http://server' 访问位于 'http://server:10079/fareg/api/account' 的 XMLHttpRequest:请求的资源上不存在 'Access-Control-Allow-Origin' header。
任何人都可以帮助确定我做错了什么来解决 CORS 错误吗?
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//add Windows authentication for http options request
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
services.AddDbContext<FAContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("FADB")));
services.AddCors(options =>
{
options.AddPolicy(name: _MyCors, builder =>
{
builder
.SetIsOriginAllowed(origin => new Uri(origin).Host == "server name")
//.WithOrigins("http://server/fareg", "http://localhost:4200")
.AllowCredentials()
.AllowAnyHeader()
//.SetIsOriginAllowed(_ => true)
.AllowAnyMethod();
});
});
services.AddSignalR().AddMessagePackProtocol();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(_MyCors);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseSignalR(routes =>
{
routes.MapHub<Hubs.HubFA>("/signalr");
});
app.UseMvc();
}
}
您将 UseCors() 放在了错误的位置。尝试使用这种语法
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy(_MyCors,
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
.....
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
.....
// app.UseRouting();
app.UseCors(_MyCors);
// app.UseAuthorization();
// app.UseEndpoints(..
}
确保 UseCors 应该在 Configure 方法的末尾但在 UseAuthorizaton 之前。在您的情况下,它应该在 UseMvc() 之上。但是AddCors应该移到配置服务的顶部。
如果这个语法适合你,只有在这之后你才能尝试添加 useorigin。
我正在开发一个应用程序,其后端是带有 SignalR 的网络核心 API,前端是 Angular。在我的计算机上调试它按预期工作但是当我在服务器上发布时它显示 Cors 错误,即使在 startup.cs.
上启用它们也是如此这是我收到的错误: CORS 策略已阻止从来源 'http://server' 访问位于 'http://server:10079/fareg/api/account' 的 XMLHttpRequest:请求的资源上不存在 'Access-Control-Allow-Origin' header。
任何人都可以帮助确定我做错了什么来解决 CORS 错误吗?
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//add Windows authentication for http options request
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
services.AddDbContext<FAContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("FADB")));
services.AddCors(options =>
{
options.AddPolicy(name: _MyCors, builder =>
{
builder
.SetIsOriginAllowed(origin => new Uri(origin).Host == "server name")
//.WithOrigins("http://server/fareg", "http://localhost:4200")
.AllowCredentials()
.AllowAnyHeader()
//.SetIsOriginAllowed(_ => true)
.AllowAnyMethod();
});
});
services.AddSignalR().AddMessagePackProtocol();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(_MyCors);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseSignalR(routes =>
{
routes.MapHub<Hubs.HubFA>("/signalr");
});
app.UseMvc();
}
}
您将 UseCors() 放在了错误的位置。尝试使用这种语法
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy(_MyCors,
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
.....
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
.....
// app.UseRouting();
app.UseCors(_MyCors);
// app.UseAuthorization();
// app.UseEndpoints(..
}
确保 UseCors 应该在 Configure 方法的末尾但在 UseAuthorizaton 之前。在您的情况下,它应该在 UseMvc() 之上。但是AddCors应该移到配置服务的顶部。
如果这个语法适合你,只有在这之后你才能尝试添加 useorigin。