Я работаю над основным веб-приложением .NET, и мое требование состоит в том, чтобы обрабатывать ошибки глобально.
Поэтому, чтобы добиться такого поведения, я попытался использовать сборку промежуточного программного обеспечения UseExceptionHandler вместе с ExceptionHandlerOptions .
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler(new ExceptionHandlerOptions {
ExceptionHandlingPath = "/Home/Error",
ExceptionHandler = async (context) => {
var exceptionFeature = context.Features.Get<IExceptionHandlerFeature>();
if (exceptionFeature != null)
{
Log.Error(exceptionFeature.Error, exceptionFeature.Error.Message);
}
}
});
}
}
Выше кода регистрируйте ошибки в файле журнала, но никогда не перенаправляйте пользователя на страницу ошибок.Когда я удаляю функцию ExceptionHandler, она работает нормально и перенаправляет пользователя на страницу ошибки.Исправьте меня, если я что-то пропустил.
Я ожидаю, что пользователь должен перенаправить на страницу ошибки, когда произойдет любое необработанное исключение, и зарегистрирует ошибку в файле журнала.
Мой обходной путь для этой проблемы:
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
}
HomeController.cs
public async Task<IActionResult> Error(string errorId)
{
var exceptionFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
if (exceptionFeature != null)
{
Log.Error(exceptionFeature.Error, exceptionFeature.Error.Message);
}
}
Приведенное выше решение работает для меня, но является ли хорошей практикой регистрировать глобальную ошибку в контроллере?Любой вывод будет оценен.
Спасибо!