Как настроить app.UseExceptionHandler со страницей бритвы Error.cshtml?

Я попытался заменить страницу ошибок MVC по умолчанию Error.cshtml собственной созданной Error2.cshtml страницей бритвы, но это не работает: ошибка 404.

Что я должен дополнительно настроить в маршрутизации, чтобы она заработала?

Startup.cs

app.UseExceptionHandler("/Home/Error2"); // new razor page is located in standard /Views/Shared folder

Модель Error2

namespace MyApp.Views.Shared
{
    public class Error2Model : PageModel
    {
        public IActionResult OnGet() // this looks  unreliable but what to use instead?
        {
           //...
        }
     }
 }

person Roman Pokrovskij    schedule 08.10.2018    source источник
comment
app.UseExceptionHandler("/Error2"); должно работать как в общей папке. OnGet может вызывать return Page(); после любой функции, которую ему нужно вызвать.   -  person Nkosi    schedule 09.10.2018
comment
спасибо! к сожалению этот совет мне не поможет   -  person Roman Pokrovskij    schedule 09.10.2018
comment
Вы просмотрели docs.microsoft.com/en-us/aspnet/core/razor-pages/   -  person Nkosi    schedule 09.10.2018
comment
Я также пытался переместить его в родительскую папку Views - не помогает.   -  person Roman Pokrovskij    schedule 09.10.2018
comment
Мне любопытно, почему он у вас в папке представлений, а не на страницах? Разве это не приложение для бритвенных страниц?   -  person Nkosi    schedule 09.10.2018
comment
Цитаты из документации In a Razor Pages app, the dotnet new Razor Pages template provides an Error page and an error PageModel class in the Pages folder.   -  person Nkosi    schedule 09.10.2018
comment
просто потому, что я заменяю стандартный error.cshtml... на самом деле я не привязан к нему. Я попробую создать страницы (пока они у меня только в областях)   -  person Roman Pokrovskij    schedule 09.10.2018
comment
Это может быть проблема XY. Вы имеете в виду стандартное приложение Core MVC или приложение Razor Pages?   -  person Nkosi    schedule 09.10.2018
comment
Я их не различаю :) это для меня магия. но подождите, я нашел ошибку в cshtml, которая не отображалась при компиляции в VS (не в первый раз).   -  person Roman Pokrovskij    schedule 09.10.2018
comment
Они отличаются тем, что в одном используются контроллеры, а в другом — модели страниц. docs.microsoft. com/en-us/aspnet/core/razor-pages/   -  person Nkosi    schedule 09.10.2018
comment
Я этого не понимаю. В приложении asp могут быть контроллеры и модели страниц вместе - это факт. Итак, как отличить приложение? Мое приложение было создано как MVC, и теперь я заменил их на Razor Pages. Остался только HomeController с индексом и ошибкой   -  person Roman Pokrovskij    schedule 09.10.2018
comment
Хорошо. Спасибо, это работает в /Pages/Error2.cshtml (и не работает в Views, Views/Shared, Views/Home). Теперь важно убедиться, что это не испортит маршрутизацию всего приложения, так как я помню, что были проблемы, когда Области и Страница существовали вместе... продолжение следует...   -  person Roman Pokrovskij    schedule 09.10.2018


Ответы (1)


Ссылка Обработка ошибок в ASP.NET Core: настройка пользовательской страницы обработки исключений

Настройте страницу обработчика исключений для использования, когда приложение не работает в среде разработки:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    env.EnvironmentName = EnvironmentName.Production;

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/error");
    }

В приложении Razor Pages шаблон dotnet new Razor Pages предоставляет страницу Error и класс ошибок PageModel в папке Pages.

В вашем случае вы бы установили его на

app.UseExceptionHandler("/error2");

который должен быть помещен в Pages/Error2.cshtml

Обновите его PageModel

namespace MyApp.Pages {
    public class Error2Model : PageModel {
        public IActionResult OnGet() {
           //...
            return Page();
        }
     }
 }
person Nkosi    schedule 08.10.2018
comment
спасибо, может быть, вы поможете мне с его продолжением: stackoverflow.com/questions/52711158/? - person Roman Pokrovskij; 09.10.2018