我的 ASP.NET 应用程序存在问题,无法访问特定端点。它在 Azure 中抛出 502 错误,并且在我的本地计算机上请求超时。我要访问的端点是产品端点。我发现通过某个中间件后
HttpContext.RequestAborted.IsCancellationRequested
被设置为true,我无法识别它,因为它是内置中间件,我无法在其上放置断点。我注意到这一点是因为我有一个自定义中间件,并且在调用 await _next(httpContext);
方法之前,IsCancellationRequested
设置为 false。然而,在调用之后,IsCancellationRequested
被设置为true,我认为这是错误的主要原因。此外,我发现我可以在隐身模式下访问产品端点,因为无论在调用 IsCancellationRequested
之前还是之后,await _next(httpContext);
始终为 false,这很奇怪。
我找到了导致问题的原因。问题是端点使用
TempData
,并且值太大。它不会导致应用程序抛出异常,而是将 HttpContext.RequestAborted.IsCancellationRequested
设置为 true。奇怪的是,当你使用TempData.Put
时,它不会抛出异常,但是如果你使用TempData[key]
,如果值太大,它会抛出异常。所以最好使用TempData[key]
。