Обработка исключения страницы razor

Привет, у меня странное поведение в нашем приложении AspNetCore 2.1 с использованием Razor Pages. Когда исключение экранируется из действия Razor Page, например OnGet, происходит сбой приложения. Исключение никогда не достигает промежуточного программного обеспечения. Похоже, что приложение кажется вылетает где-то во внутреннем методе PageActionInvoker.Next.

Я не могу вставить код, так как его слишком много. Но следующее приведет к сбою приложения:

public async void OnGet() {
    await Task.CompletedTask; // normally we await something else
    throw new Exception("Boom!");
}

Примечание:

Мы:

  • объединение представлений и страниц Razor. Представления являются частью «более старого» раздела приложения.
  • мы разрешаем области Razor Page.

Нам нужно настроить какую-то функцию?

Мы что-то упускаем? Есть ли у кого-нибудь предложения?

НАШЛИ ЭТО Ничего особенного. Что ж, AspNetCore принимает async void OnGet, и все работает нормально ДО тех пор, пока не возникнет исключение.

используя следующие исправления.

public async Task OnGetAsync() {

Исключения в Razor Pages обрабатываются так же, как и в MVC, поскольку Razor Pages - это функция MVC. Код обработки ошибок в методе Configure шаблона Razor Pages идентичен тому, что вы найдете в шаблоне проекта MVC по умолчанию. Скорее всего, вы не видите исключений из-за чего-то уникального в вашей настройке.

Mike Brind 31.10.2018 14:03

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

Chris Pratt 31.10.2018 15:23

Что ж, я предполагаю, что в промежуточном программном обеспечении возникнет исключение, чтобы его можно было зарегистрировать, и пользователь мог получить внутреннюю ошибку сервера. Мы используем UseExceptionHandler и UseStatusCodePagesWithReExecute, оба из которых не достигаются. Я думаю, что это возвращение к выяснению того, что делает нашу установку «уникальной». Я надеялся на предложения.

alex.pino 31.10.2018 15:35
0
3
626
1

Ответы 1

Похоже, что даже AspNetCore плохо справляется со следующей конструкцией:

public async void OnGet() {
...
}

Несмотря на то, что это принято и, похоже, работает, возможные исключения не обрабатываются правильно.

Правильный способ сделать это:

public async Task OnGetAsync() {
....
}

Не знаю, классифицируется ли это как ошибка AspNetCore ... в этом смысле, возможно, ее следует отклонить, как и многие другие вещи. Ну что ж ... ошибка исправлена.

Это не имеет отношения к ASP.NET Core. Смотрите это: haacked.com/archive/2014/11/11/async-void-methods

Mike Brind 31.10.2018 16:38
Сообщение от Стивена Клири по общей теме тоже отлично.
Kirk Larkin 31.10.2018 16:48

Другие вопросы по теме