如果继承BaseController,则带有OneException的ASP.NET MVC4控制器不工作

如果继承BaseController,则带有OneException的ASP.NET MVC4控制器不工作,asp.net,asp.net-mvc,exception-handling,aop,Asp.net,Asp.net Mvc,Exception Handling,Aop,我有一个UsersController,带有OnException(有效),但是如果我让Controller从BaseController继承,OnException不起作用,即使我把它放在BaseController中 基本上,我想让我的所有控制器继承自BaseController,这样我就可以在那里有一个OnException处理程序,它捕获所有东西…为了让所有控制器以相同的方式处理异常,不需要从自定义的基本控制器类继承。您可以使用ActionFilter来完成此操作 [AttributeU

我有一个
UsersController
,带有
OnException
(有效),但是如果我让
Controller
BaseController
继承,
OnException
不起作用,即使我把它放在
BaseController


基本上,我想让我的所有控制器继承自
BaseController
,这样我就可以在那里有一个
OnException
处理程序,它捕获所有东西…

为了让所有控制器以相同的方式处理异常,不需要从自定义的基本控制器类继承。您可以使用ActionFilter来完成此操作

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
    AllowMultiple = true, Inherited = true)]
public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext context)
    {
        // do custom exception handling here
        // to return View("Error"), you can just do this:
        context.Result = new ViewResult { ViewName = "Error" };
    }
}
您可以使用以下Global.asax将其应用于库中的所有控制器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //filters.Add(new HandleErrorAttribute()); // default MVC setting
    filters.Add(new CustomHandleErrorAttribute());
}

谢谢你的回答,它起作用了:)。明亮的一个问题,如何从OneException显示我的erorr视图页面?我不能再调用视图(“错误”),因为我不在controller@baconbeastnz我建议你再问一个问题。就我个人而言,我很好奇answer@Baconbeastnz还有@Bryan Ross,我已经更新了我的答案。你可以从一个控制器上做任何事情,你可以从一个动作过滤器上做任何事情,你只需要做一些不同的事情
returnview(“Error”)
只是
System.Web.Mvc.Controller
上构造
ViewResult
对象的方法。我建议您下载MVC源代码并查看一下。您可以随时将其用作参考,以了解如何执行此类操作。@danludwig,这样您就无法更改模型(无setter)。如何将模型传输到视图中?@Shahar,您可以在构建模型时将模型添加到ViewResult中<代码>新建ViewResult{ViewName=“Error”,ViewData=new ViewDataDictionary(new MyCustomViewModel())}