首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp mvc5全局异常处理程序返回到同一页

asp mvc5全局异常处理程序返回到同一页
EN

Stack Overflow用户
提问于 2014-06-30 00:35:02
回答 1查看 1.2K关注 0票数 1

我对c#和asp mvc并不熟悉,我无法找到一种方法来处理全局异常,但是如果生成了它们,则返回到相同的页面。现在,在我的控制器中,在所有post方法中都有这样的内容:

代码语言:javascript
复制
try
{
    service.Action(object);
    return RedirectToAction("Index");
}
catch (MyBusinessException e)
{
    ViewData["error"] = (e.InnerException.Message ?? "");
    return View(object);
}

内部异常的消息是一条友好的消息,就像“您不能用相同的代码创建两篇文章”,我想以创建文章的形式向用户展示,而不是将他发送到错误页面

我试图通过创建一个覆盖OnException方法的基本控制器来重现这种行为,但是我不知道如何从我来的地方返回到相同的页面并显示错误消息。

基于@JotaBe响应的编辑

我已经创建了一个全局OnException过滤器并在FilterConfig.cs中注册了,现在我可以返回页面,但是从ExceptionContext获得的模型为null,因此在加载视图时会得到一个NullPointerException。

这是我目前的方法:

代码语言:javascript
复制
    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
        };
    }

怎样才能获得贴出的模型?

EN

回答 1

Stack Overflow用户

发布于 2014-06-30 00:49:56

你需要做的是使用过滤器。过滤器是可应用于控制器以修改其行为的属性。这里有MVC过滤器的官方MSDN文档。

在前面的文档中,您可以看到有一个名为HandleErrorAttribute的过滤器,它是您在特定情况下需要的过滤器。

过滤器可以全局应用(在应用程序启动时注册它)或装饰每个控制器。要获得一个很好的解释和示例,您可以阅读这个博客条目

请记住,有可能有不同的解释,抛出的那些你。因此,您应该考虑到根据异常类型显示不同信息的可能性。此筛选器允许根据异常类型显示不同的视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24481550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档