对.NET Web API的Angular 6跨域POST请求返回401(未经授权)

时间:2018-07-23 23:05:47

标签: angular http asp.net-web-api cors rxjs

我有一个Angular 6应用,正在尝试向位于不同本地域的POST项目发出.NET Web API请求。

尝试执行此POST会向控制台抛出以下错误: POST http://localhost:9090/api/values 401 (Unauthorized)

Web API正在localhost:9090上运行
Angular在localhost:5200

上运行

在.NET Web API中,我的CORS在Web.config中启用:

<add name="Access-Control-Allow-Origin" value="http://localhost:5200" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />

角度服务(应将错误记录到服务器):

import { Injectable } from '@angular/core';
import { Http, Response, Request, Headers } from '@angular/http';
import { Observable } from 'rxjs';
import { from } from 'rxjs';
import { map, filter, catchError, mergeMap } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class ErrorService {

    http: Http;

  constructor(http: Http) {

    this.http = http;
  };

  postError(argument) {
    let request = new Request({
      method: "POST",
      url: "http://localhost:9090/api/values"
    });

    return this.http.request(request)
      .pipe(map(res => res.json()))
      .subscribe(
        data => console.warn(data),
        err => console.error(err),
        () => console.log("empty")
      );
  }
}

我怀疑我的Angular服务-也许我的标头中没有包含必要的凭证吗?

最后一个注意事项-从头开始创建新的Web API项目时,POST可以正常工作(我没有尝试使用我的特定服务,但是我的队友遇到了相同的401问题,并创建了一个新的Web API项目为他工作)。因此,我的Web API项目中的某些设置使得我的Angular服务不符合Web API项目(?)的安全性标准。任何提示将不胜感激。

1 个答案:

答案 0 :(得分:3)

我假设您使用NTLM身份验证:

我的第一个尝试是将请求选项withCredentials包含在here中:

let request = new Request({ method: "POST", url: "http://localhost:9090/api/values", withCredentials: true});

我也强烈建议使用HttpClient而不是Http和Request类,因为它们是deprecated