Angular 7发布请求后出现net :: ERR_INVALID_HTTP_RESPONSE错误

时间:2018-12-23 20:14:56

标签: angular asp.net-core-webapi angular7

我正在开发小型Web应用程序,并且正在使用angular 7和asp.net核心Web api作为后端。我试图用角度提出http发布请求。我的服务返回了字符串(令牌),当我收到它时,我想在警报框中显示它。

我已经用Postman测试了我的服务,并且一切正常。

从浏览器中,我的请求已成功映射到控制器的操作方法。我在此方法主体中设置了断点,它成功返回了令牌,没有任何问题。

但是httpclient返回错误:

[object Object]

在浏览器控制台中,我看到以下内容:

POST https://localhost:44385/api/auth net::ERR_INVALID_HTTP_RESPONSE

在注入到组件中的服务类中,我有两种方法(用于POSTGET)。它们看起来像这样:

logIn(username: string, password: string) {

    const encodedCredentials = btoa(username + ':' + password);

    const httpOptions = {
        headers: new HttpHeaders({
            "Authorization": "Basic " + encodedCredentials,
            "Access-Control-Allow-Origin":"*"
        }),
        responseType: 'text' as 'text'
    };

    this.http.post(this.urlBase + 'auth', null , httpOptions)
    .subscribe(result => {
        alert(result);
    }, error => {
        alert(error); // [object Object]
    });
}

get(){
    return this.http.get(this.urlBase + 'auth', {responseType: 'text'});
}

有什么问题吗?

更新

HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}
error: ProgressEvent
bubbles: false
cancelBubble: false
cancelable: false
composed: false
currentTarget: XMLHttpRequest {__zone_symbol__xhrSync: false, __zone_symbol__xhrURL: "https://localhost:44385/api/auth", __zone_symbol__loadfalse: null, __zone_symbol__errorfalse: null, __zone_symbol__xhrListener: ƒ, …}
defaultPrevented: false
eventPhase: 0
isTrusted: true
lengthComputable: false
loaded: 0
path: []
returnValue: true
srcElement: XMLHttpRequest {__zone_symbol__xhrSync: false, __zone_symbol__xhrURL: "https://localhost:44385/api/auth", __zone_symbol__loadfalse: null, __zone_symbol__errorfalse: null, __zone_symbol__xhrListener: ƒ, …}
target: XMLHttpRequest {__zone_symbol__xhrSync: false, __zone_symbol__xhrURL: "https://localhost:44385/api/auth", __zone_symbol__loadfalse: null, __zone_symbol__errorfalse: null, __zone_symbol__xhrListener: ƒ, …}
timeStamp: 80234.59999999614
total: 0
type: "error"
__proto__: ProgressEvent
headers: HttpHeaders
headers: Map(0) {}
lazyUpdate: null
normalizedNames: Map(0) {}
__proto__: Object
message: "Http failure response for (unknown url): 0 Unknown Error"
name: "HttpErrorResponse"
ok: false
status: 0
statusText: "Unknown Error"
url: null
__proto__: HttpResponseBase

更新2:

要求邮递员

enter image description here


enter image description here

更新3:尝试多次获取令牌表明,有时发布请求成功,有时却失败...

enter image description here

3 个答案:

答案 0 :(得分:17)

在ASP.NET Core 2.2中,我们发布了一个新的服务器,该服务器可在IIS中用于Windows方案。您遇到的问题如下:https://github.com/aspnet/AspNetCore/issues/4398

发送XMLHttpRequest时,会有一个预检OPTIONS请求,该请求返回状态码204。IIS服务器不正确处理了该请求,从而向客户端返回了无效响应。

在您的ASP.NET Core应用程序中,您现在可以尝试解决该问题的方法吗?

app.Use(async (ctx, next) =>
{
  await next();
  if (ctx.Response.StatusCode == 204)
  {
    ctx.Response.ContentLength = 0;
  }
});
Configure方法的开头

此问题还将在下一个ASP.NET Core修补程序版本中修复。补丁发布后,我会跟进。

编辑: 最新版本(2.2.1)应该解决此问题:https://dotnet.microsoft.com/download/dotnet-core/2.2。请尝试查看问题是否已解决。

答案 1 :(得分:4)

我弄清楚了问题所在。它在服务器端。您是否使用过ASP.NET Core 2.2?降级到2.1后,它终于可以工作了!

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0"/>
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
  </ItemGroup>
</Project>

但是我不明白为什么。唯一更改的是一个标题,即 Server 标题。它从 Microsoft-IIS / 10.0 (2.2)更改为 Kestrel (2.1)

答案 2 :(得分:0)

.net核心版本背后的问题。如果是dotnet核心2.2.101,那就有问题了。我已经更改了最新版本,即2.2.102,然后可以解决问题。同样,如果您获得的是dotnet core <2.2.101的最旧版本,则可以解决此问题。