Исключение пузыря для промежуточного программного обеспечения usestatuspagedes после фильтра исключений ядра asp.net - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующие настройки при запуске.

app.UseStatusCodePagesWithReExecute("/mvc/error/", "?statusCode={0}");

У меня также есть настройка ExceptionFilter с использованием AddMvcCore ().Ниже приведен фильтр исключений.

public override void OnException(ExceptionContext context)
    {
        ApiError apiError;
        switch (context.Exception)
        {
            case ApiException exception:
                // handle explicit 'known' API errors
                var ex = exception;
                context.Exception = null;
                apiError = new ApiError(ex.StatusCode, ex.Message) { Messages = ex.Messages };
                context.HttpContext.Response.StatusCode = ex.StatusCode;
                break;

            case UnauthorizedAccessException _:
                apiError = new ApiError(401, "Unauthorized Access");
                context.HttpContext.Response.StatusCode = 401;
                _loggingService.LogError<ApiExceptionFilter>(LogCategory.Api,  context.Exception);
                break;

            default:
                // unhandled errors
                apiError = new ApiError(500, context.Exception.GetBaseException().Message) { Detail = context.Exception.StackTrace };
                context.HttpContext.Response.StatusCode = 500;
                _loggingService.LogError<ApiExceptionFilter>(LogCategory.Api, context.Exception);
                break;
        }

        // always return a JSON result
        context.Result = new JsonResult(apiError);

        base.OnException(context);
    }

Проблема заключается в том, что когда исключение возникает в методе действия, фильтр срабатывает, но отправляет результат JSON.То, что я хочу сделать, это выдвинуть исключение вплоть до промежуточного программного обеспечения UseStatusCodePagesWithReExecute.Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 18 мая 2018

Вы не можете установить результат из фильтра действий, если хотите использовать также промежуточное ПО с кодом состояния.Посмотрите на предварительные условия промежуточного программного обеспечения кода состояния в исходном коде , оно пропустит выполнение конвейера кодовой страницы состояния, если тело ответа уже задано или было записано клиенту.

...