ASP. NET Ядро не перехватывает исключение, если URI содержит недопустимые символы excape - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть другой URI для перенаправления, если исходный URI для перенаправления содержит недопустимые escape-символы (например, \ r, \ n). Это внутри ApiController, который унаследован от ControllerBase ASP. NET core.

        try
        {
            return Redirect(uriString);
        }
        catch (Exception ex)
        {
            return Redirect(uriError);
        }

Здесь uriString - исходный uri, но он содержит символы исключения - \ r и \ n. Итак, он перенаправляет на эту страницу: enter image description here

Но я хочу, чтобы он перехватил это исключение и перенаправил на страницу uriError, которая находится внутри catch. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Перенаправление прекращает текущий контекст. Вы не можете перехватить перенаправление, а затем выбрать перенаправление на другой URL-адрес, поскольку он уже перенаправлен. Это разработано и имеет смысл.

Существует способ перехвата исключений перенаправлений, но в основном только для целей регистрации, а не для повторного перенаправления. Почему вы не проверяете URL самостоятельно?

if(yourCustomUrlValidator(uriString))
{
   return Redirect(uriString);
}
else
{
   return Redirect(uriError);
}

Вы также можете использовать следующее. net ядро, встроенное в проверку

if (!ModelState.IsValid)

Другой подход заключается в использовании промежуточного программного обеспечения. для обработки исключений и перенаправления на страницу ошибок, но это будет работать только для исключений, которые могут возникнуть перед методом Redirect. Вы можете прочитать об этом здесь: https://dotnetcoretutorials.com/2017/03/20/custom-error-pages-asp-net-core/

Другой вариант - обработать ошибку перенаправления на стороне клиента.

0 голосов
/ 29 апреля 2020

использовать глобальный обработчик исключений (промежуточное ПО исключений) для этого сценария.
или пользователь может попытаться преобразовать строку в URL и обработать исключение.
в вашем случае return Redirect (""); вернет элемент управления, и проверка URL произойдет в конвейере. так что либо вы можете создать глобальный обработчик исключений для обработки всех исключений в конвейере, либо попытаться перенаправить строку в URL.
для глобального обработчика исключений -> https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-3.1#exception -handler-lambda

ИЛИ

Вместо всего этого вы можете напрямую настроить Страница ошибки при запуске, как это -> https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-3.1#developer -exception-page

...