[英]Access Controller from ExceptionFilterAttribute in ASP.NET Core
[英]How pass the TempData in ExceptionFilterAttribute in Asp.Net Core
我試圖像這樣在Asp.Net Core MVC中為我的控制器創建Exception filter
:
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;
}
}
我需要在OnException
方法中與TempData
一起TempData
-如何在該位置為TempData
設置一些異常信息? 我已經將此TempData用於一些通知。
缺少這樣的內容: context.Controller.TempData["notification"]
-控制器屬性可能已刪除。
您可以使用ITempDataDictionaryFactory
實現所需的ITempDataDictionaryFactory
,可以通過依賴注入將其納入構造函數。 它只有一個函數GetTempData
,可用於訪問您稱為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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.