.NET Core中ExceptionFilterAttribute的TempData操作与重定向咨询
.NET Core 中 ExceptionFilterAttribute 重定向与 TempData 操作方案
一、重定向写法确认
直接调用 exceptionContext.HttpContext.Response.Redirect(url) 本身可行,但必须标记异常已被处理,否则框架会继续处理该异常,导致重定向失效。正确完整写法如下:
// 标记异常已处理,阻止后续异常流程 exceptionContext.ExceptionHandled = true; // 执行重定向 exceptionContext.HttpContext.Response.Redirect(url);
二、TempData 的替代操作方案
.NET Core 中 ExceptionFilterContext 不直接暴露 TempData,需通过 ITempDataDictionaryFactory 来创建并操作 TempData 实例,具体分两种场景:
场景1:过滤器通过依赖注入注册
先在过滤器构造函数中注入 ITempDataDictionaryFactory:
private readonly ITempDataDictionaryFactory _tempDataFactory; public CustomExceptionFilter(ITempDataDictionaryFactory tempDataFactory) { _tempDataFactory = tempDataFactory; }
然后在 OnException 方法中操作 TempData:
var tempData = _tempDataFactory.GetTempData(exceptionContext.HttpContext); // 移除指定键的 TempData tempData.Remove("TargetKey"); // 添加异常信息到 TempData tempData.Add("ExceptionMsg", exceptionContext.Exception.Message);
场景2:过滤器通过特性标记使用
若过滤器是直接以特性形式标注在控制器/方法上,可从 HttpContext 的服务容器中获取工厂实例:
var tempDataFactory = exceptionContext.HttpContext.RequestServices.GetService<ITempDataDictionaryFactory>(); var tempData = tempDataFactory.GetTempData(exceptionContext.HttpContext); // 移除操作 tempData.Remove("TargetKey"); // 添加异常信息 tempData.Add("ExceptionMsg", exceptionContext.Exception.Message);
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

