我是新來的c#和asp mvc,我找不到一種方法來處理全局異常,但返回到它們生成的同一頁。現在在我的控制器,我在所有崗位的方法是這樣的:asp mvc5全局異常處理程序返回同一頁
try
{
service.Action(object);
return RedirectToAction("Index");
}
catch (MyBusinessException e)
{
ViewData["error"] = (e.InnerException.Message ?? "");
return View(object);
}
的內部異常的消息是一個友好的消息,例如「不能創建代碼相同的兩篇文章」,我想以創建文章的形式向用戶展示,而不是將其發送到錯誤頁面
我試圖通過創建覆蓋OnException方法的基本控制器來重現此行爲,但我不知道如何返回到來自我的相同頁面並顯示錯誤消息。
編輯基於響應來自@JotaBe
我創建了一個全球onException的過濾器,並在FilterConfig.cs註冊,現在我能夠回到從被我進來的頁面,但模型,我從ExceptionContext獲得它是空的,因此當它加載視圖時我得到一個NullPointerException。
這是我目前的方法:
public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
{
var currentController = (string)filterContext.RouteData.Values["controller"];
var currentActionName = (string)filterContext.RouteData.Values["action"];
LOGGER.ErrorFormat("Action: {0} - Controller: {1} - ExceptionMessage: {2} - InnerException: {3}",
currentActionName,
currentController,
filterContext.Exception.Message,
filterContext.Exception.InnerException.Message);
Exception e = filterContext.Exception;
filterContext.ExceptionHandled = true;
filterContext.Result = new ViewResult()
{
ViewName = currentActionName,
ViewData = filterContext.Controller.ViewData,
MasterName = Master,
TempData = filterContext.Controller.TempData
};
}
我怎樣才能獲得被張貼的模式?
你可以在這裏提供更多的代碼.. –
你也可以在global.asax中使用'Application_Error'方法並處理錯誤。 –
什麼是「發佈的模型」? – JotaBe