Из фильтра исключений Вы можете отобразить пользовательский вид, установив результат контекста.
public class ValidationFilterAttribute : ActionFilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext context)
{
// only handle ValidationException
var ex = context.Exception as ValidationException;
if (ex == null) return;
// re-render get action's view, or redirect to get action
var result = new ViewResult { ViewName = "GetView" }
context.HttpContext.Response.Clear();
context.Result = result;
}
}
Где GetView
должна быть имя зрения прибудет действия пользователя.
Образец фильтра исключений, который использует собственное представление ошибки разработчиков для отображения сведений об исключениях.
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IModelMetadataProvider _modelMetadataProvider;
public CustomExceptionFilterAttribute(
IHostingEnvironment hostingEnvironment,
IModelMetadataProvider modelMetadataProvider)
{
_hostingEnvironment = hostingEnvironment;
_modelMetadataProvider = modelMetadataProvider;
}
public override void OnException(ExceptionContext context)
{
if (!_hostingEnvironment.IsDevelopment())
{
// do nothing
return;
}
var result = new ViewResult {ViewName = "CustomError"};
result.ViewData = new ViewDataDictionary(_modelMetadataProvider,context.ModelState);
result.ViewData.Add("Exception", context.Exception);
// TODO: Pass additional detailed data via ViewData
context.Result = result;
}
}
Обратите внимание, что приведенный выше код отправляет контекст, состояние модели и исключение в представление.
В случае все, что вам нужно, это персонализированная страница ошибки обратитесь к ASP.NET Core Error Handling
Как правило, вы не должны использовать фильтр исключений, чтобы превратить ошибку в успех. Рассмотрите возможность использования фильтра действий, если у вас есть такое требование. Сказав, что, по какой-то причине, если вы по-прежнему необходимо перенаправить из фильтра исключения, это то, как это может быть сделано
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
private readonly IHostingEnvironment _hostingEnvironment;
public CustomExceptionFilterAttribute(
IHostingEnvironment hostingEnvironment,
IModelMetadataProvider modelMetadataProvider)
{
_hostingEnvironment = hostingEnvironment;
}
public override void OnException(ExceptionContext context)
{
if (!_hostingEnvironment.IsDevelopment())
{
// do nothing
return;
}
var result = new RedirectToRouteResult(
new RouteValueDictionary(new { controller = "Home", action = "Error" }));
context.Result = result;
}
}
Это делает, что конкретный вид, а не перенаправлять. И он отображает без ошибок проверки, так что информация теряется. – grokky
Вы не можете использовать фильтр исключений, чтобы превратить исключение в успех. Однако вы можете передать нужные данные. Я отредактировал ответ. –