-1

我正在使用 .Net Core 构建 API 和 Angular Web 应用程序来使用这些 API。两者都使用不同的端口在本地托管。

.Net 核心 API: http://localhost:5000

Angular Web 应用程序: http://localhost:4444

这是我在 Angular 中的服务方法

export class AdvertisementService {
  // Define API 
  apiURL = environment.apiUrl;

  constructor(private http: HttpClient) {}

  // Configure HTTP Options
  httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json'
    })
  }

  // HttpClient API get() method => Fetch Advertisement List.
  getAdvertisements(): Observable<Advertisement[]> {
    return this.http.get<Advertisement>(this.apiURL + '/Advertisements')
                    .pipe(retry(1),catchError(this.handleError))
  }

  // HttpClient API post() method => Create Advertisement
  createAdvertisement(advertisement): Observable<Advertisement> {
    return this.http.post<Advertisement>(this.apiURL + '/Advertisements', JSON.stringify(advertisement), this.httpOptions)
    .pipe(retry(1),catchError(this.handleError))
  }  

  private handleError(error: any): Promise<any> {
    console.error('An error occurred', error); // for demo purposes only
    return Promise.reject(error.message || error);
  }
}

当我通过 Angular App 调用 API 方法时,它会引发以下错误:

从源“ http://localhost:4444 ”访问“ http://localhost:5000/api/Advertisements ”处的 XMLHttpRequest已被 CORS 策略阻止:Access-Control-Allow 不允许请求标头字段内容类型- 预检响应中的标头。

我在我的 .Net Core 中添加了 CORS,如下所示在ConfigureServices方法中:

 services.AddCors(options =>
 {
     options.AddPolicy(MyAllowSpecificOrigins,
     builder =>
     {
         builder.WithOrigins("http://localhost:4444");
     });
 });
4

3 回答 3

1

在 startup.cs 中添加services.AddCors();ConfigureServices 方法和Configure 方法app.UseCors(x => x.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());

于 2019-05-06T15:20:42.533 回答
0

在 WebApi.config 中启用 CORS:

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
于 2019-05-06T12:39:36.840 回答
0

根据此链接中提到的解决方案,以下对我有用。

readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddCors(o => o.AddPolicy(MyAllowSpecificOrigins, builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    }));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(MyAllowSpecificOrigins);
}
于 2019-05-07T10:53:11.907 回答