Вопрос

Я работаю над проектом MVC, где я скопировал много работы из проекта NerdDinner.В NerdDinner мы возвращаем несколько просмотров, таких как DinnerNotFound, InvalidOwner, если ужин не найден или если пользователь не является владельцем ужина.Но в моем проекте я хочу создать view (CustomException) и использовать его для всех подобных целей.Поэтому я вызываю exception и перехватываю их в событии onException моего basecontrller.Затем оттуда я хочу отобразить пользовательский вид после входа в систему ELMAH.

Но вызов для отображения этого представления (RedirectToAction("CustomException", ce );) похоже, не работает, он не переходит к действию CustomException.

Кто-нибудь может мне помочь, в чем может быть причина.Я перечислил здесь все файлы.Также, как я должен внести запись в глобальный файл.asax.cs.коды приведены ниже.

С уважением Parminder

Список исключений.cs

список пространств имен.Исключения { список общедоступных статических КлассовExeceptions {

    public static CustomException GetCustomException(Exception ex)
    {
        CustomException ce = new CustomException();
        switch (ex.Message)
        {
            case ItemConstant.INVALID_OWNER:
                ce = new CustomException("Invalid Owner", "OOps you are not owner of this item");
                break;
            case ItemConstant.ITEM_NOT_FOUND:
                ce = new CustomException("Item not Found", "The Item you are looking for couldnt be found");
                break;
            default:
               ce = new CustomException("Error ", "There is an Error.");
               break;
        }

        return ce;

    }


}

}

BaseController.cs

список пространств имен.Контроллеры { открытый частичный класс BaseController :Контроллер {

    public virtual ActionResult CustomException(CustomException ce)
    {
        return View(ce);   
    }

    protected override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);

        CustomException ce = ListingExeceptions.GetCustomException(filterContext.Exception);
        ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
        filterContext.ExceptionHandled = true;

        RedirectToAction("CustomException",ce );
    }
}

}

ListingController.cs

список пространств имен.Контроллеры

{

общедоступные сведения о виртуальном действии (длинный идентификатор, заголовок строки) {

        Item item = itemRepository.GetItemByID(id);

        if (item == null)

        {

            throw new Exception("ItemNotFound");

        }

        else

        {

            return View("Details", new ListingFormViewModel(item, photoRepository));

        }
    }

}

global.asax.cs

маршруты.MapRoute( "Исключение", // Название маршрута "{контроллер} /{действие}/{ce}", // URL с параметрами новый { контроллер = "Base", действие = "CustomException", ce = "" } );

Это было полезно?

Решение

Я не уверен, что вы можете перенаправить таким образом внутри OnException.Добавление filterContext.Result = должно сработать:

protected override void OnException(ExceptionContext filterContext)
{
    base.OnException(filterContext);

    CustomException ce = ListingExeceptions.GetCustomException(filterContext.Exception);
    ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
    filterContext.ExceptionHandled = true;

    filterContext.Result = RedirectToAction("CustomException",ce );
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top