在我的Asp.net核心项目中,我使用Microsoft.AspNetCore.App版本=“ 2.2.1”
并在启动服务中调用AddCors
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
});
.....
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(policyName: "CorsPolicy");
....
Controller
:
[Route("api/[controller]")]
[EnableCors("CorsPolicy")]
public class ManageUsersController : Controller
{ ...
在angular 5 App中,当调用Web API时,在浏览器的控制台中显示此错误
在以下位置访问XMLHttpRequest 原产地的“ http://localhost:5000/api/Account/LoginByPortal” “ http://localhost:4200”已被CORS政策屏蔽:对 预检请求未通过访问控制检查: 响应中的“ Access-Control-Allow-Origin”标头不得为 当请求的凭据模式为“包括”时,使用通配符“ *”。的 XMLHttpRequest发起的请求的凭据模式为 由withCredentials属性控制。
角度服务:
loginByPortal(credentials: Credentials): Observable<userLoginViewmodel> {
const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
return this.http
.post(`${this.appConfig.apiEndpoint}/Account/LoginByPortal`, credentials,
{ headers: headers, withCredentials: true /* For CORS */ })
.map(response => response || {})
.catch((error: HttpErrorResponse) => Observable.throw(error));
}
我不想使用.WithOrigins("http://localhost:4200"
我想在CoresPloicy中使用AllowAnyOrigin
有什么问题?我该怎么解决?
答案 0 :(得分:4)
解决方法:https://stackoverflow.com/a/53790841/8801075
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.SetIsOriginAllowed((host) => true)
.AllowCredentials()
);