wake-up-neo.com

net :: ERR_INVALID_HTTP_RESPONSE Fehler nach Postanforderung mit Angular 7

Ich arbeite an einer kleinen Webanwendung und verwende winki 7 und asp.net core web api als Backend. Ich versuche, http post request mit eckig zu machen. Mein Dienst gibt eine Zeichenfolge (Token) zurück. Wenn ich ihn erhalte, möchte ich ihn im Benachrichtigungsfeld anzeigen.

Ich habe meinen Dienst mit Postman getestet und alles funktioniert wie erwartet.

Vom Browser aus wird meine Anfrage erfolgreich der Aktionsmethode des Controllers zugeordnet. Ich habe einen Haltepunkt in diesem Methodenkörper festgelegt, und es wird erfolgreich ein Token ohne Probleme zurückgegeben.

Der httpclient gibt jedoch einen Fehler zurück:

[object Object]

Und in der Browser-Konsole sehe ich Folgendes:

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

Ich habe zwei Methoden (für POST und für GET) in einer Service-Klasse, die in eine Komponente eingefügt wird. Sie sehen wie folgt aus:

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'});
}

Was kann problem sein

Update:

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

Update 2:

Anfrage beim Postboten:

 enter image description here


 enter image description here

Update 3: Der Versuch, mehrmals Token zu erhalten, zeigte, dass die Post-Anfrage manchmal erfolgreich ist und manchmal nicht.

 enter image description here

10
public public

In ASP.NET Core 2.2 haben wir einen neuen Server veröffentlicht, der für Windows-Szenarien in IIS ausgeführt wird. Das Problem, dem Sie begegnen, sieht folgendermaßen aus: https://github.com/aspnet/AspNetCore/issues/4398

Beim Senden von XMLHttpRequest gibt es eine Preflight-Anforderung OPTIONS, die den Statuscode 204 zurückgibt. Dies wurde vom Server IIS falsch behandelt und gab eine ungültige Antwort an den Client zurück.

Versuchen Sie in Ihrer ASP.NET Core-Anwendung zunächst die Problemumgehung:

app.Use(async (ctx, next) =>
{
  await next();
  if (ctx.Response.StatusCode == 204)
  {
    ctx.Response.ContentLength = 0;
  }
});

am Anfang der Configure-Methode. 

Dies wird auch in der nächsten Patch-Version von ASP.NET Core behoben. Ich werde weitermachen, wenn der Patch veröffentlicht wird.

Edit: Die neueste Version (2.2.1) sollte dieses Problem beheben: https://dotnet.Microsoft.com/download/dotnet-core/2.2 . Bitte versuchen Sie zu sehen, ob das Problem behoben ist.

14
Justin Kotalik

Ich habe herausgefunden, wo das Problem liegt. Es ist auf der Serverseite. Haben Sie ASP.NET Core 2.2 verwendet? Nach dem Downgrade auf 2.1 funktioniert es endlich!

<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>

Aber ich kann nicht verstehen warum. Das einzige, was sich geändert hat, ist in einem Header, dem Server Header. Es wurde von Microsoft-IIS/10.0 (2.2) in Kestrel (2.1) geändert.

4

Das Problem hinter der Dotnet-Kernversion. Wenn der Dotnet-Core 2.2.101 dann das Problem hat. Ich habe letzte Version der Änderungen, d. H. 2.2.102. Dann wird das Problem behoben. Wenn Sie die älteste Version von dotnet core <2.2.101 erhalten, ist das Problem behoben.

0
Wafa Abbas