net :: ERR_INVALID_HTTP_RESPONSE ошибка после пост-запроса с Angular 7 - PullRequest
0 голосов
/ 23 декабря 2018

Я работаю над небольшим веб-приложением и использую angular 7 и asp.net core web api в качестве серверной части.Я пытаюсь сделать http пост-запрос с угловым.Мой сервис возвращает строку (токен), и когда я его получаю, я хочу показать его в окне предупреждения.

Я протестировал свой сервис с Postman и все работает, как ожидалось.

Сбраузер мой запрос успешно сопоставлен с методом действия контроллера.Я установил точку останова в этом теле метода, и он успешно возвращает токен без проблем.

Но httpclient возвращает ошибку:

[object Object]

И в консоли браузера я вижуэто:

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

У меня есть два метода (для POST и для GET) в классе обслуживания, внедренном в компонент. Они выглядят так:

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 голосов
/ 29 декабря 2018

В 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. Пожалуйста, попробуйте и посмотрите, решена ли проблема.

0 голосов
/ 15 января 2019

Проблема в версии ядра dotnet.Если ядро ​​dotnet 2.2.101, то оно имеет проблему.У меня есть изменения последней версии, т. Е. 2.2.102, то это решает проблему.Точно так же, если вы получаете самую старую версию ядра dotnet <2.2.101, тогда это решит проблему. </p>

0 голосов
/ 24 декабря 2018

Я выяснил, где находится проблема.Это на стороне сервера.Вы использовали 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) на пустельга (2.1)

...