В моем приложении используется пользовательское исключение NotFoundException, и я использую промежуточное ПО обработчика исключений ядра ASP.NET для перехвата исключения и возврата ответа 404.
Это упрощенная версия промежуточного программного обеспечения.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
app.UseExceptionHandler(appBuilder => {
appBuilder.Run(async context => {
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
var responseContent = new {
StatusCode = context.Response.StatusCode,
Message = "Not found"
};
await context.Response.WriteAsJsonAsync(responseContent);
});
});
...
}
Я ожидаю, что этот код вернет ответ 404 с содержимым в формате JSON, но запросы просто завершатся ошибкой. Если я запускаю тест с помощью HttpClient, я получаю следующую ошибку:
System.Net.Http.HttpRequestException: 'Error while copying content to a stream.'
Если я изменю код состояния в промежуточном программном обеспечении на любой другой, кроме 404, он, похоже, будет работать так, как ожидалось.
// changing this line
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
// to this line will successfully return the result
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
Этот код 404 работал, пока я не изменил целевую структуру с netcoreapp3.1 на net5.0. Что мне нужно изменить, чтобы успешно вернуть 404 с JSON из промежуточного программного обеспечения исключений при нацеливании на net5.0?