在每个动作中替换try catch(MyEx ex)

时间:2010-08-05 07:16:43

标签: asp.net-mvc

我需要一些像这样的东西:

public ActionResult Ac()
{
  try {
   //stuff...
  }
  catch(MyException ex)
  {
   //handle
  }
}

但没有在每个动作方法中使用try catch

3 个答案:

答案 0 :(得分:2)

使用Exception Filters进行异常处理。

答案 1 :(得分:2)

您希望使用HandleErrorAttribute注释您的类 - http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx

如果上面内置处理程序的功能不够,那么你可以定义自己的实现IExceptionFilter的类 - OnException方法接受一个ExceptionContext对象,其中包含Result和HttpContext属性,可用于控制结果,如:

public class MyHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
  public void OnException(ExceptionContext filterContext)
  {
    Exception e = filterContext.Exception;

    // Do some logging etc. here

    if (!filterContext.ExceptionHandled && filterContext.HttpContext.IsCustomErrorEnabled)
    {
      ViewResult lResult = ...
      filterContext.Result = lResult;
      filterContext.ExceptionHandled = true;
      filterContext.HttpContext.Response.Clear();
      filterContext.HttpContext.Response.StatusCode = 500;
      filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }
  }

答案 2 :(得分:1)

怎么样

[HandleError(ExceptionType = typeof(MyException ), View = "MyErrView"))]
public ActionResult Ac()
{
    //stuff
}

但使用自定义HandleError属性来处理您要定位的例外类型。 This SO question应该给你一个良好的开端。