У меня очень странное поведение, которое я не могу объяснить. У меня есть ASPNET Core (2.1) API, просто стандартный API, ничего особенного.
И я создаю интерфейс с Angular (7). Этот интерфейс используется для выполнения некоторых действий CRUD для определенного объекта.
Я выполнил все необходимые шаги в бэкэнд-сервисе (API работает, и все конечные точки на месте, CORS настроен на разрешение всего). Кроме того, у меня есть запросы почтальона для каждой конечной точки, причем каждый запрос выполняется.
У меня есть магазин Redux (ngrx) в Angular, также там есть версия 7.
Теперь, когда я выполняю запросы get (не имеет значения, является ли это запросом списка или одного объекта), запрос всегда выполняется успешно. ПОЧТА. Однако запросы PUT и DELETE иногда не выполняются.
Когда я запускаю сеанс отладки на бэкэнде, я вижу, что бэкэнд всегда завершается успешно, возвращая либо 200, 201, либо 204 в зависимости от запроса. Давайте возьмем PUT, например, всегда возвращает ответ 200 с новой версией сущности в теле (отформатированной в JSON ofcourse).
Теперь этот запрос на поставку ИНОГДА терпит неудачу на внешнем интерфейсе, еще раз, сервер всегда возвращает 200. Если я не делаю никаких изменений данных во внешнем интерфейсе, просто продолжайте посылать один и тот же запрос с теми же заголовками и одинаковыми body, в результате чего сервер возвращает тот же (успешный) ответ с тем же телом, интерфейс иногда работает нормально, а иногда выдает ошибку.
Я использую rxjs 6.3.3
Вот пример того, как я обрабатываю запрос на обслуживание в моих эффектах избыточности:
@Effect()
updatedEntity$: Observable<Action> = this.actions$.pipe(
ofType<UpdatedEntity>(shortenedLinksActions.updatedEntity),
debounceTime(300),
switchMap((action) =>
this.service.put(action.dto).pipe(
map((response: EntityDto) => {
return new UpdatedEntitySuccess(response);
}),
catchError((response: HttpErrorResponse) => {
if (response.status === 0) {
return of(
new GeneralFailure(
'The backend service is not responding'
)
);
}
return of(new GeneralFailure(response.error));
})
)
)
);
[править]
Хм, если я отключу перенаправление https, это означает, что бэкэнд может запускать http вместо https, все запросы выполняются (бэкэнд и внешний интерфейс), то есть это как-то связано с https. Поскольку я работаю только в режиме разработки, используя самозаверяющий сертификат разработчика, я предполагаю, что угловой http-клиент застрял там где-то.
Если это так, я все еще не понимаю, почему он принимает время от времени некоторые запросы, хотя
[править 2]
И, о, вау ... Когда я отлаживаю систему, на которой работает проект вместо IIS Express, все работает и под самозаверяющим ssl-сертификатом. Это означает, что у клиента ng http есть несколько всплывающих окон, отправляющих запросы на сервер с самозаверяющим сертификатом, работающим в IIS Express. Так что на данный момент мои проблемы исчезли, так как запуск системного проекта вместо IIS Express мне подходит, но я все еще удивляюсь, почему он не работает в IIS Express.