App.UseStatusCodePagesWithReExecute, похоже, больше не выполняет конвейерC#

Место общения программистов C#
Ответить
Anonymous
 App.UseStatusCodePagesWithReExecute, похоже, больше не выполняет конвейер

Сообщение Anonymous »

На моем веб-сайте .NET 7 я настроил конвейер обработки для использования UseStatusCodePagesWithReExecute, но с зарегистрированным промежуточным программным обеспечением в конвейере возвращается 404, оно правильно возвращает страницу 404.cshtml, но это не так. кажется, что он повторно обрабатывает весь конвейер.
Например, мне нужно отобразить страницу 404.cshtml, но мне нужно изменить ответ.StatusCode = 400 вместо 404.
Во время построения конвейера я делаю следующее:

Код: Выделить всё

app
.Use( async ( context, next ) => {
if ( new[] { 500, 401, 403, 404 }.Contains( context.Response.StatusCode ) )
{
Console.WriteLine( $"app.Use (before) StatusCode: {context.Response.StatusCode}, {context.Request.Path}" );
}
await next();
} )
.UseExceptionHandler( "/errors/handler" )
.UseStatusCodePagesWithReExecute( "/errors/{0}" );

// register more middlewares, one which could return 404, psuedo is below...

app.Use( async ( context, next ) =>
{
if ( context.Request.Path.StartsWithSegments( "/app/channel-homex" ) )
{
context.Response.StatusCode = 404;
return;
}
await next();
} ).Use( async ( context, next ) =>
{
if ( new[] { 500, 401, 403, 404 }.Contains( context.Response.StatusCode ) )
{
Console.WriteLine( $"app.Use (after) StatusCode: {context.Response.StatusCode}, {context.Request.Path}" );
}
await next();
} );
Насколько я понимаю, когда я делаю context.Response.StatusCode = 404; return; предполагается, что конвейер будет запущен заново, однако я получаю в консоли только вывод «после», а не «до» и «после».
Я неправильно понимаю конвейеры или то, как обрабатывать return и await next() в моих реализациях промежуточного программного обеспечения?

Подробнее здесь: https://stackoverflow.com/questions/787 ... line-again
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»