TBA*_*TBA 3 cors asp.net-core angular
我有 .net Core 3.0 Web API 项目,其中我已启用 CORS,如下所示:
配置服务
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin());
});
Run Code Online (Sandbox Code Playgroud)
并在配置方法中
app.UseCors();
当我从角度应用程序使用 httpclient 调用这个端点时,我会收到 CORS 错误。
我可以看到标题,如下所示:
我认为在我的启动中添加 CORS 应该可以解决这个问题。
更新:
添加配置和配置服务代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<LabSoftwareContext>(options => options.UseSqlServer(Configuration.GetConnectionString("LabDatabase")));
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "Lab API",
Description = "Lab Software APIs"
});
});
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("AllowOrigin");
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API");
});
}
Run Code Online (Sandbox Code Playgroud)
我认为其根本原因是中间件的顺序Configure()- 如果顺序不正确,可能会导致意外的 Cors 故障。
例如我认为UseCors()可能需要放在之后UseHttpsRedirection()
这里有一个(复杂!)表解释了中间件的排序: https: //learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/ ?view=aspnetcore-3.1#built-in-middleware
您的代码根据同一页面的示例进行修改:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API");
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3526 次 |
| 最近记录: |