为什么我在401时无法处理/捕获http错误状态?

时间:2018-05-24 20:02:36

标签: angular http rxjs

堆栈是Angular 5 - > .NET Core API。我在调用http.get时有一些错误处理,而我的浏览器控制台显示401(未授权),错误状态为0.我在这里做错了什么?...

getSearch(request:string) {

    return this.http.get<ProviderSearch>(request, options)
        .pipe(
            tap(_ => {
                console.log(`MyDataService: ${endpointPath}`);
            }),
            catchError(this.apiErrorService.handleError<MyDataSearchResponse>(`GET ${endpointPath}`)),
        );
}

public handleError<T> (operation = 'operation', pushNotify: boolean = false, result?: T) {

    return (error: any): Observable<T> => {

        console.error(`**** ERROR: ${JSON.stringify(error)}`); // log to console instead

        throw(error || 'Server error');
    };
}

的Program.cs:

    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((hostContext, logging) =>
            {
                logging.AddConfiguration(hostContext.Configuration.GetSection("Logging"));
                logging.AddConsole();
                logging.AddDebug();
            })
            //.UseIISIntegration()
            //.UseKestrel()
            .UseStartup<Startup>()
            .Build();

Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
        // other configs

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder =>
                {
                    builder.AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials();
                });
        });

        // other configs
    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseCors("AllowAll");

        app.UseMvc();
    }

当未实施CORS时,出现以下错误响应:

  

无法加载http://localhost:62489/api/mysearch:对预检请求的响应未通过访问控制检查:否&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; http://localhost:4202&#39;因此不允许访问。响应的HTTP状态代码为404.

launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost:62489/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/provider",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Console": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

当我从客户端(Angular)拨打电话时,标题(来自fiddler)显示3个电话:

呼叫#1(204响应)标头(请求和响应):

REQUEST:

OPTIONS /api/providersearch?&specialtyId=-1&providerTypeId=-1&regionId=-1&cityId=-1&organizationId=-1&pageStart=1&pageSize=5 HTTP/1.1
Host: localhost:62489
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:4202
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

响应:

HTTP/1.1 204 No Content
Vary: Origin
Server: Kestrel
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Origin: http://localhost:4202
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcYWNveFxzb3VyY2VccmVwb3NcY21uLnByb3ZpZGVyLmRhdGFcY21uLnByb3ZpZGVyLmFwaVxhcGlccHJvdmlkZXJzZWFyY2g=?=
X-Powered-By: ASP.NET
Date: Thu, 24 May 2018 20:50:21 GMT

呼叫#2(401响应)标头(请求和响应):

REQUEST:

GET /api/providersearch?&specialtyId=-1&providerTypeId=-1&regionId=-1&cityId=-1&organizationId=-1&pageStart=1&pageSize=5 HTTP/1.1
Host: localhost:62489
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://localhost:4202
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Content-Type: application/json
Referer: http://localhost:4202/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

响应:

HTTP/1.1 401 Unauthorized
Vary: Origin
Server: Kestrel
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:4202
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcYWNveFxzb3VyY2VccmVwb3NcY21uLnByb3ZpZGVyLmRhdGFcY21uLnByb3ZpZGVyLmFwaVxhcGlccHJvdmlkZXJzZWFyY2g=?=
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Thu, 24 May 2018 20:50:21 GMT
Content-Length: 0
Proxy-Support: Session-Based-Authentication

呼叫#3(401响应)标头(请求和响应):

REQUEST:

GET /api/providersearch?&specialtyId=-1&providerTypeId=-1&regionId=-1&cityId=-1&organizationId=-1&pageStart=1&pageSize=5 HTTP/1.1
Host: localhost:62489
Connection: keep-alive
Authorization: Negotiate YHcGBisGAQUFAqBtMGugMDAuBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHqI3BDVOVExNU1NQAAEAAACXsgjiAwADADIAAAAKAAoAKAAAAAoAqz8AAAAPR0dIUy1MMDAxNkNNTg==
Accept: application/json, text/plain, */*
Origin: http://localhost:4202
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Content-Type: application/json
Referer: http://localhost:4202/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

响应:

HTTP/1.1 401 Unauthorized
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate oYH8MIH5oAMKAQGhDAYKKwYBBAGCNwICCqKB4wSB4E5UTE1TU1AAAgAAAAYABgA4AAAAFcKJ4plNUkS82EIzcAQlUHsBAACiAKIAPgAAAAoAqz8AAAAPQwBNAE4AAgAGAEMATQBOAAEAFABHAEcASABTAC0ATAAwADAAMQA2AAQAGgBjAGEAbgBtAGUAZABuAGUAdAAuAGMAbwBtAAMAMABHAEcASABTAC0ATAAwADAAMQA2AC4AYwBhAG4AbQBlAGQAbgBlAHQALgBjAG8AbQAFABoAYwBhAG4AbQBlAGQAbgBlAHQALgBjAG8AbQAHAAgAEawP1aDz0wEAAAAA
Date: Thu, 24 May 2018 20:50:21 GMT
Content-Length: 341
Proxy-Support: Session-Based-Authentication

呼叫#4(200个响应)标头(请求和响应):

REQUEST:

GET /api/providersearch?&specialtyId=-1&providerTypeId=-1&regionId=-1&cityId=-1&organizationId=-1&pageStart=1&pageSize=5 HTTP/1.1
Host: localhost:62489
Connection: keep-alive
Authorization: Negotiate oXcwdaADCgEBoloEWE5UTE1TU1AAAwAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAABXCiOIKAKs/AAAADxTu/MxIVvwagppbuHaQldKjEgQQAQAAALv5rPHqFBetAAAAAA==
Accept: application/json, text/plain, */*
Origin: http://localhost:4202
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Content-Type: application/json
Referer: http://localhost:4202/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

响应:

HTTP/1.1 200 OK
Cache-Control: public,max-age=30
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:4202
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcYWNveFxzb3VyY2VccmVwb3NcY21uLnByb3ZpZGVyLmRhdGFcY21uLnByb3ZpZGVyLmFwaVxhcGlccHJvdmlkZXJzZWFyY2g=?=
Persistent-Auth: true
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate oRswGaADCgEAoxIEEAEAAACBDX3/vTx/zQAAAAA=
Date: Thu, 24 May 2018 20:50:25 GMT

0 个答案:

没有答案