2

私はUsersController, with OnException(これは動作します) を持っていますが、Controllerを から継承すると、 . に入れても動作BaseControllerOnExceptionませんBaseController

基本的に、すべてのコントローラーを継承したいので、すべてをキャッチするハンドラーBaseControllerを1つだけ持つことができます...OnException

4

1 に答える 1

5

すべてのコントローラーで例外を同じ方法で処理するために、カスタムの基本コントローラー クラスから継承する必要はありません。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());
}
于 2012-08-10T00:59:43.510 に答える