代码之家  ›  专栏  ›  技术社区  ›  Kyle Vassella

Angular 6跨域Post请求到.NET Web API返回401(未经授权)

  •  -1
  • Kyle Vassella  · 技术社区  · 6 年前

    我有一个 Angular 6 我正在尝试的应用程序 POST 请求我们 .NET Web API 位于其他本地域上的项目。

    尝试这个 将以下错误引发到控制台: 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")
          );
      }
    }
    

    我怀疑我的角度服务-也许我不包括必要的证书在我的头?

    最后一个注意事项——当从头开始创建一个新的Web API项目时,这个帖子会起作用(我没有尝试过使用我的特定服务,但我的团队伙伴也有同样的服务) 401 问题和创建新的Web API项目对他很有效)。所以在我的 Web API 项目是这样的,我的角度服务不符合安全标准的 Web API 项目(?)任何提示都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Daniel Habenicht    6 年前

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

    我的第一次尝试将包括请求选项 withCredentials 如所述 here :

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

    我还强烈建议使用httpclient,而不是http,并按原样请求类。 deprecated .