如何使用ASP.NET Web API将CORS中的OPTIONS请求配置为Access-Control-Allow-Origin

时间:2018-05-25 22:54:24

标签: asp.net-web-api cors asp.net-web-api2

我在Angular 5项目中尝试从我的服务器获取令牌时遇到问题。我的const stream = through2.obj((chunk, enc, callback) => { callback(null, parseString(chunk)) }); stream .pipe(through2.obj((chunk, enc, callback) => { callback(null, JSON.stringify(chunk)); })) .pipe(process.stdout); socket.on('m', data => stream.write(data)); 请求永远不会被发送,服务器返回POST并在控制台中显示以下内容:

Console Screenshot

Headers Screenshot

Response Screenshot

我的理解是我需要在CORS中配置400 Bad Request请求以允许跨源请求,但我觉得我已经尝试了所有解决方案,但没有任何成功。

至于我迄今为止所尝试的内容,在OPTIONS我有这个:

Web.config Screenshot

我在Web.config

中全局启用了CORS

WebApiConfig.cs Screenshot

我甚至实施了https://www.stevefenton.co.uk/2012/11/using-cors-with-asp-net-web-api/

建议的解决方案

以下是我在Angular 5项目中的电话:

WebApiConfig.cs

当我使用POSTMAN拨打电话时,一切运行顺利,我得到userAuthentication(userDetails: LoginUser): Observable<LoginUser> { var data = "username=" + userDetails.username + "&password=" + userDetails.password + "&grant_type=password"; var reqHeader = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded', 'No-Auth': 'True' }); return this.http.post<LoginUser>(this._baseUrl + 'Token', data, { headers: reqHeader }) .pipe( catchError(this.handleError) ) }

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。我需要使用Microsoft.Owin.CorsMicrosoft.AspNet.Cors添加Microsoft.AspNet.WebApi.Cors

然后,我必须将app.UseCors(CorsOptions.AllowAll);添加到我的Startup.cs文件中:

enter image description here

...并从customHeaders中的system.webserver代码中移除Web.config

enter image description here

现在一切顺利。

注意:请务必注意,在WebApiConfig.cs启用CORS时,如果您已按照我之前显示的步骤操作,则必须按以下步骤启用:

enter image description here

......而不是这样:

enter image description here

如果您这样做,则会收到错误消息,指出您的标头包含多个值,因此会拒绝您Origin访问。