c# - 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 开发人员”。发生异常时,异常过滤器会捕获该异常,但如果用户是否具有此角色,则显示的错误消息必须非常不同(详细)。
我的问题是:如何从异常过滤器访问会话实例,或者更好:如何设置(传递)这个布尔值到异常过滤器?
提前感谢您的建议!
解决方案
共享信息的关键是访问OnExceptions
'sExceptionContext
参数并在会话中深入了解您的项目。
那就是context
。HttpContext
. Items
whereHttpContext
是类型HttpContext
并且Items
是IDictionary<object, object>
.
当然,在抛出异常之前,需要将会话参数保存到会话中。你可以用一种不同的方式来做这件事,这可能对你有吸引力或不适合你:捕获异常并在其位置抛出一个自定义异常,该异常具有boolean
保持你的价值的属性。然后,您可以通过在过滤器中访问该异常的属性context
。Exception
在转换为您的自定义异常类型之后。
推荐阅读
- highcharts - hightchart 注释不起作用
- c# - 在 ASP.NET Core 中使用 reloadOnChange 重新加载选项
- dart - GPS是否激活 - 颤振
- javascript - 使用正则表达式替换字符串中的单词
- python - Heroku 不收集我的静态文件
- swift - Swift IBDesignables 和字符间距(紧缩)
- vb.net - DataGridView 滚动显示列在其他列之上
- google-analytics - 将我的客户分析帐户与我自己的 Adwords 帐户相关联
- qt - 当 Qt Quick Controls 2 中的按钮独占时取消选中按钮
- ios - 如何在堆栈视图中显示 wkwebview?