ASP NET Core 5 - 访问(或传递)一些值给异常过滤器

ASP NET Core 5 - accessing (or passing) some value to exception filter

在 ASP NET 5 Core Web 应用程序的 C# .NET Core 中,我们有一个自定义异常过滤器:

public class CustomExceptionFilter : IExceptionFilter
{
   public void OnException(ExceptionContext context)
   {
     ...

添加到基础控制器的:

[TypeFilter(typeof(CustomExceptionFilter))]
public class MyBaseController : Controller
{

在使用用户登录名的控制器中,我们从 SQL table 中读取了一些用户属性,并将一些关键属性设置为会话数据 - 目前最重要的是 he/she 是否是“Web 开发人员”。当异常发生时,异常过滤器会捕获该异常,但如果用户是否具有此角色,则显示的错误消息必须非常不同(详细)。

我的问题是:如何从异常过滤器访问会话实例,或者更好:如何将此布尔值设置(传递)到异常过滤器?

提前感谢您的建议!

共享信息的关键是访问 OnExceptionsExceptionContext 参数并在会话中深入了解您的项目。

那是 context.HttpContext.Items where HttpContext is of type HttpContextItemsIDictionary<object, object>.

当然,在抛出异常之前,session参数需要先保存到session中。您可以采用一种可能对您有吸引力或不适合您的不同方式来做到这一点:捕获异常并在其位置抛出一个具有 boolean 属性 的自定义异常来保持您的价值。然后,在转换为自定义异常类型后,您可以通过 context.Exception 在过滤器中访问该异常的 属性。