Я работаю над небольшим веб-приложением и использую angular 7 и asp.net core web api в качестве серверной части. Я пытаюсь отправить HTTP-запрос с помощью angular. Моя служба возвращает строку (токен), и когда я ее получаю, я хочу показать ее в окне предупреждения.
Я протестировал свой сервис, 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:
Запрос к почтальону:
Обновление 3: попытка получить токен несколько раз показала, что иногда почтовый запрос выполняется успешно, а иногда нет ...
В 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 . Пожалуйста, попробуйте и посмотрите, решена ли проблема.
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения