我有一个非常奇怪的行为,我无法解释。我有一个ASPNET Core(2.1)API,只是一个标准API,没有花哨的地方。
我正在使用Angular(7)构建前端。该前端用于对特定实体执行某些CRUD操作。
我已经在后端服务中完成了所有必需的步骤(API运行并且所有端点都已到位,CORS设置为允许所有操作)。另外,我对每个端点都有邮递员请求,每个请求都成功。
我在Angular有Redux(ngrx)商店,那里也是版本7。
现在,当我执行get请求时(无论是列表请求还是单个实体请求都没有关系),请求始终会成功。在POST上。 PUT和DELETE请求,但是,该请求有时会失败。
当我在后端启动调试会话时,我看到后端总是成功,根据请求返回200、201或204。让我们以PUT为例,始终在正文中以实体的新版本返回200响应(以课程的JSON格式)。
现在,此放置请求SOMETIMES在前端失败,再次,服务器始终返回200。如果我在前端未进行任何数据更改,只需继续发送具有相同标头和相同内容的相同请求主体,使后端在同一主体上返回相同的(成功)响应,前端有时工作正常,有时会引发错误。
我正在使用rxjs 6.3.3
这是一个示例,说明我如何在redux效果中处理服务请求:
@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));
})
)
)
);
[edit]
嗯,如果我关闭https重定向,这意味着后端能够运行HTTP而不是https,那么所有请求都会成功(明智的后端和前端),这与https有关。当我仅在开发人员模式下运行时,使用自签名的开发人员证书,我假设有角的http客户端卡在了某个地方。
如果是这样,我仍然不明白为什么它偶尔接受
[编辑2]
哦,哇...当我调试运行项目而不是IIS Express的系统时,所有内容也都可以在自签名ssl证书下运行。这意味着ng http客户端具有一些通过在IIS Express中运行的自签名证书向后端发送请求的组。所以现在我的问题消失了,因为代替IIS Express运行系统项目对我来说很好,但是我仍然想知道为什么它不能在IIS Express中运行。