Asp .Net Core Как обрабатывать страницы ошибок в области - PullRequest
1 голос
/ 26 июня 2019
if (env.IsDevelopment())
{ 
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Administration/Error");
    app.UseExceptionHandler("/Production/Error");
}

Как определить 2 страницы обработки ошибок для разных областей на страницах бритвы?

Ответы [ 3 ]

3 голосов
/ 27 июня 2019

Альтернативой пользовательской странице обработчика исключений является предоставление лямбда-выражения UseExceptionHandler. Использование лямбда-выражения позволяет получить доступ к пути запроса, допустившего ошибку, до возврата ответа.

Вот пример использования лямбды для обработки исключений:

app.UseExceptionHandler(errorApp =>
{
    errorApp.Run(async context =>
    {
        var exceptionHandlerPathFeature =
            context.Features.Get<IExceptionHandlerPathFeature>();

        // Use exceptionHandlerPathFeature to process the exception (for example, 
        // logging), but do NOT expose sensitive error information directly to 
        // the client.

        if (exceptionHandlerPathFeature.Path.Contains("/Administration/"))
        {
            context.Response.Redirect("/Administration/Error");
        }

        if(exceptionHandlerPathFeature.Path.Contains("/Production/"))
        {
            context.Response.Redirect("/Production/Error");
        }
    });
});

Можно сослаться на Обработка ошибок в ASP.NET Core: обработчик исключений, лямбда .

0 голосов
/ 26 июня 2019

Я не знаю ни одного способа добиться этого с помощью конфигурации.Однако вы можете определить исходный путь в вашем обработчике ошибок:

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

При возникновении ошибки .NET добавляет объект IExceptionHandlerPathFeature к объекту запроса.Вы можете использовать его, чтобы получить путь:

public class HomeController : BaseController
{
    [Route("Error")]
    public IActionResult Error()
    {
        var exceptionPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();

        var path = exceptionPathFeature.Path;

        if(path.Contains("/Administration/"))
            return View("AdministrationErrorPage");

        if(path.Contains("/Production/"))
            return View("ProductionErrorPage");

        return View("GenericErrorPage");
    }
}
0 голосов
/ 26 июня 2019

Обновлен комментарий, так как я написал его в первый раз.По этой ссылке вы сможете указать делегата ExceptionHandler как часть вашего вызова.Я не пробовал, но мог бы решить вашу проблему.

 if (env.IsDevelopment())
 {          
      app.UseDeveloperExceptionPage();
 }
 else
 {
            ExceptionHandlerOptions options;
            options.ExceptionHandler = new RequestDelegate();
            app.UseExceptionHandler(options);
 }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...