Перенаправьте asp.net mvc, если пользовательское исключение выдается

Я должен глобально перенаправить своих пользователей, если пользовательская ошибка брошена в мое приложение. Я попытался поместить некоторую логику в свой global.asax файл для поиска моей пользовательской ошибки и если это брошено, выполните перенаправление, но мое приложение никогда не поражает мой global.asax метод. Это продолжает давать мне ошибку, которая говорит, что мое исключение было не обработано пользовательским кодом.

вот то, что я имею в своем глобальном.

protected void Application_Error(object sender, EventArgs e)
{
    if (HttpContext.Current != null)
    {
        Exception ex = HttpContext.Current.Server.GetLastError();
        if (ex is MyCustomException)
        {
            // do stuff
        }
    }
}

и мое исключение выдается следующим образом:

if(false)
    throw new MyCustomException("Test from here");

когда я поместил это в выгоду попытки из файла, выдающего исключение, мой метод Application_Error никогда не достигается. У кого-либо есть некоторые предложения относительно того, как я могу обработать это глобально (соглашение за моим пользовательским исключением)?

спасибо.

Редактирование 15.01.2010: Вот то, что находится в//, действительно наполняют.

RequestContext rc = new RequestContext(filterContext.HttpContext, filterContext.RouteData);
string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(new { Controller = "Home", action = "Index" })).VirtualPath;
filterContext.HttpContext.Response.Redirect(url, true);
8
задан Luiso 20 October 2017 в 16:31
поделиться

1 ответ

Вы хотите создать фильтр клиента для ваших контроллеров / действий. Вам нужно будет наследовать из Filterattribute и IExceptionFilter .

Что-то вроде этого:

public class CustomExceptionFilter : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext.Exception.GetType() == typeof(MyCustomException))
        {
            //Do stuff
            //You'll probably want to change the 
            //value of 'filterContext.Result'
            filterContext.ExceptionHandled = true;
        }
    }
}

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

Эти две статьи могут помочь:

10
ответ дан 5 December 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: