web-dev-qa-db-fra.com

erreur net :: ERR_INVALID_HTTP_RESPONSE après la demande de publication avec Angular 7

Je travaille sur une petite application Web et j'utilise une API Web angular 7 et asp.net principale comme back-end. J'essaie de faire une demande de publication http avec angular. Mon service retourne une chaîne (jeton) et lorsque je le reçois, je souhaite l'afficher dans le champ d'alerte.

J'ai testé mon service avec Postman et tout fonctionne comme prévu.

Depuis le navigateur, ma demande est correctement mappée sur la méthode d'action du contrôleur. J'ai défini un point d'arrêt dans le corps de cette méthode, qui renvoie correctement le jeton sans problème.

Mais httpclient renvoie une erreur:

[object Object]

Et dans la console du navigateur, je vois ceci:

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

J'ai deux méthodes (pour POST et pour GET) dans une classe de service injectée dans un composant. Elles ressemblent à celles-ci:

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

Quel peut être le problème?

Mettre à jour:

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

Mise à jour 2:

Demande avec Postman:

 enter image description here


 enter image description here

Mise à jour 3: essayer d'obtenir plusieurs fois un jeton a montré que parfois, la demande de post est réussie et parfois non ...

 enter image description here

10
public public

Dans ASP.NET Core 2.2, nous avons publié un nouveau serveur qui s'exécute dans IIS pour les scénarios Windows. Le problème que vous rencontrez ressemble à: https://github.com/aspnet/AspNetCore/issues/4398

Lors de l'envoi de XMLHttpRequest, une demande de contrôle en amont OPTIONS renvoie un code d'état de 204. Cela n'a pas été correctement géré par le serveur IIS, renvoyant une réponse non valide au client.

Dans votre application ASP.NET Core, pouvez-vous essayer la solution de contournement pour l'instant:

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

au début de la méthode Configure

Ce problème sera également résolu dans la prochaine version du correctif d'ASP.NET Core. Je ferai un suivi lorsque le correctif sera publié.

Edit: La dernière version (2.2.1) devrait résoudre ce problème: https://dotnet.Microsoft.com/download/dotnet-core/2.2 . S'il vous plaît essayez de voir si le problème est résolu.

14
Justin Kotalik

J'ai compris où se situe le problème. C'est du côté du serveur. Avez-vous utilisé ASP.NET Core 2.2? Après le passage à la version 2.1, tout fonctionne enfin!

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

Mais je ne comprends pas pourquoi. La seule chose qui a changé est dans un en-tête, le Server header. Il est passé de Microsoft-IIS/10.0 (2.2) à Kestrel (2.1)

4
Christophe Gigax

Le problème derrière la version de base de dotnet. Si le noyau dotnet 2.2.101 a alors le problème. J'ai des modifications dernière version i.e. 2.2.102 alors il résout le problème. De même, si vous obtenez la version la plus ancienne de dotnet core <2.2.101, le problème est résolu.

0
Wafa Abbas