Вопрос
Я работаю над проектом 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 );
}