2017-11-22 22 views
1
私はこのようなAsp.Net MVCのコアの私のコントローラの Exception filterを作成しようとしました

:私はTempDataOnException方法の作業に必要なAsp.NetコアにExceptionFilterAttributeでTempDataをを渡す方法

public class ControllerExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    private readonly IHostingEnvironment _hostingEnvironment; 

    public ControllerExceptionFilterAttribute(
     IHostingEnvironment hostingEnvironment) 
    { 
     _hostingEnvironment = hostingEnvironment; 
    } 

    public override void OnException(ExceptionContext context) 
    { 
     //How construct a temp data here which I want to pass to error page? 
     var result = new ViewResult 
     { 
      ViewName = "Error" 
     }; 

     context.ExceptionHandled = true; // mark exception as handled 
     context.Result = result; 
    } 
} 

- どのようにここでは例外情報をTempDataに設定できますか?私はこのTempDataを何らかの通知に使用しました。

このようなものがありません:context.Controller.TempData["notification"] - コントローラのプロパティが削除されている可能性があります。

答えて

1

ITempDataDictionaryFactoryを使用すると、依存関係注入によってコンストラクタに取り込むことができます。これにはGetTempDataという1つの関数があり、参照するものにはTempDataという名前でアクセスするために使用できます。あなたのニーズに合った完全な例を次に示します:

public class ControllerExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    private readonly IHostingEnvironment _hostingEnvironment; 
    private readonly ITempDataDictionaryFactory _tempDataDictionaryFactory; 

    public ControllerExceptionFilterAttribute(
     IHostingEnvironment hostingEnvironment, 
     ITempDataDictionaryFactory tempDataDictionaryFactory) 
    { 
     _hostingEnvironment = hostingEnvironment; 
     _tempDataDictionaryFactory = tempDataDictionaryFactory; 
    } 

    public override void OnException(ExceptionContext context) 
    { 
     //How construct a temp data here which I want to pass to error page? 
     var tempData = _tempDataDictionaryFactory.GetTempData(context.HttpContext); 

     var result = new ViewResult 
     { 
      ViewName = "Error" 
     }; 

     context.ExceptionHandled = true; // mark exception as handled 
     context.Result = result; 
    } 
} 
+0

モデルをExceptionContextからViewResultに渡すことは可能ですか? Exceptionの型がUIExceptionの場合、Viewに戻りたいと思います。 – Jenan

関連する問題