首页 > 解决方案 > ASP NET Core 5 - 访问(或传递)一些值到异常过滤器

问题描述

在 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 表中读取一些用户属性,并为会话数据设置一些关键属性 - 现在最重要的是他/她是否是“Web 开发人员”。发生异常时,异常过滤器会捕获该异常,但如果用户是否具有此角色,则显示的错误消息必须非常不同(详细)。

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

提前感谢您的建议!

标签: c#asp.net-coreexceptionexceptionfilterattribute

解决方案


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

那就是contextHttpContext. ItemswhereHttpContext是类型HttpContext并且ItemsIDictionary<object, object>.

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


推荐阅读