在In Asp.net Core 2.2.1中访问XMLHttpRequest

时间:2019-01-24 09:21:08

标签: angular asp.net-core

在我的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
有什么问题?我该怎么解决?

1 个答案:

答案 0 :(得分:4)

解决方法:https://stackoverflow.com/a/53790841/8801075

app.UseCors(builder => builder
                .AllowAnyHeader()
                .AllowAnyMethod()
                .SetIsOriginAllowed((host) => true)
                .AllowCredentials()
            );