如果继承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())}