使用 ActionFilter 进行 ASP.NET Core 日志记录

2024-07-04

我正在尝试添加日志记录功能以保存到我的 SQL Server 数据库。我尝试创建 ActionFilter 类并应用于我的控制器之一,但不起作用。 我想捕获用户 ID、IP 地址、控制器和操作访问以及时间戳。我缺少什么?

AuditAttribute Action Filter class

public class AuditAttribute : ActionFilterAttribute
{
    private readonly ApplicationDbContext _db;

    //Inject ApplicationDBContext
    public AuditAttribute(ApplicationDbContext db)
    {
        _db = db;
    }

    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

         //Stores the Request in an Accessible object
         var request = filterContext.HttpContext.Request;

        //Generate an audit
        Portal_Logger audit = new Portal_Logger()
        {
            teacherNRIC = filterContext.HttpContext.User.Identity.Name,
            IPAddress = Convert.ToString(ipHostInfo.AddressList.FirstOrDefault(address => address.AddressFamily == AddressFamily.InterNetwork)),
            ControllerAccess = (string)filterContext.RouteData.Values["controller"],
            Timestamp = DateTime.Now,
        };

         public DbSet<Portal_Logger> Portal_LoggerDBSet { get; set; }
        //Store objects to database
        _db.Portal_LoggerDBSet.Add(audit);
        _db.SaveChanges();

        base.OnActionExecuting(filterContext);
    }

}
}     


Home controller class
[AuditAttribute]
public class HomeController : Controller
{ ..content of controller
}


Portal_logger model class
public class Portal_Logger
{
    [Key]
    public int LoggerId { get; set; }

    [StringLength(10)]
    public string userid{ get; set; }

    [StringLength(50)]
    public string IPAddress { get; set; }

    [StringLength(50)]
    public string ControllerAccess { get; set; }

    public DateTime? Timestamp { get; set; }

}

请参阅附图所示的错误消息错误信息截图 https://i.stack.imgur.com/iETGt.png

我尝试了一下,出现了新问题。在此输入图像描述 https://i.stack.imgur.com/94XCV.png

我尝试过这个方法也行不通。 [AuditActionFilter] -> 错误消息(AuditActionFilter 不是属性类)

public class HomeController : Controller
{
}

我尝试了这个方法但仍然不起作用。

[AuditActionFilter] - error message -> "AuditActionFilter" is not an 
public class HomeController : Controller
{
}

我已将 services.AddMVC 添加到startup.cs
services.AddMvc(options => options.Filters.Add(typeof(AuditActionFilter)));

这是 AuditActionFilter.cs

public class AuditActionFilter : IActionFilter
{
    private readonly ApplicationDbContext _db;

    public AuditActionFilter(ApplicationDbContext db)
    {
        _db = db;
    }

    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var request = filterContext.HttpContext.Request;

        Portal_Logger audit = new Portal_Logger()
        {
            teacherNRIC = filterContext.HttpContext.User.Identity.Name,
            IPAddress = Convert.ToString(ipHostInfo.AddressList.FirstOrDefault(address => address.AddressFamily == AddressFamily.InterNetwork)),
            ControllerAccess = (string)filterContext.RouteData.Values["controller"],
            Timestamp = DateTime.Now,
        };

        //Store objects to database
        _db.Portal_LoggerDBSet.Add(audit);
        _db.SaveChanges();
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // do something after the action executes or leave it empty
    }

}

用于使用AuditAttribute在特定的方法或控制器上,你可以尝试ServiceFilterAttribute or TypeFilterAttribute.

以下是可用的两个选项:

Option1

Use TypeFilterAttribute.

[TypeFilter(typeof(AuditAttribute))]
public class HomeController : Controller

Option2

Use ServiceFilterAttribute

  1. 登记AuditAttribute in Startup.cs

     services.AddScoped<AuditAttribute>();
    
  2. Use AuditAttribute

     [ServiceFilter(typeof(AuditAttribute))]
     public class HomeController : Controller
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ActionFilter 进行 ASP.NET Core 日志记录 的相关文章

  • 在 C 中搜索已排序的数组

    我正在解决 C 语言中的一个问题 我有一个简短的问题 问题如下 我得到了一些已排序的整数数组 比如说 a i 1 2 3 3 3 现在 我应该运行一个程序来搜索给定的整数 返回第一次出现的位置以及该整数在数组中出现的次数 所以 如果我正在寻
  • 在派生虚函数中强制执行正确的参数类型

    我发现很难非常简洁地描述这个问题 所以我附上了演示程序的代码 总的想法是 我们需要一组派生类 它们被迫从基类实现一些抽象 Foo 函数 每个派生的 Foo 调用都必须接受不同的参数作为输入 但所有参数也应该从 BaseInput 类派生 到
  • 如何在 Blazor Web 程序集中检查客户端连接状态

    我有一个 Blazor webasemmbly 应用程序 它使用 asp net core 作为后端 使用 Blazor wasm 作为前端 我有一个类可以检查 HTTP 问题 例如 notfound BadReqest 和 public
  • QTreeView、QFileSystemModel、setRootPath 和 QSortFilterProxyModel 以及用于过滤的 RegExp

    我需要显示特定目录的 QTreeView 并且我想让用户能够使用 RegExp 过滤文件 据我了解 Qt 文档 我可以使用标题中提到的类来实现这一点 如下所示 Create the Models QFileSystemModel fileS
  • 如何使用 MVVM light 处理 WP 8.1 上的后退按钮?

    我正在寻找适当的方法来处理 Windows Phone 8 1 WinRT 上的后退按钮按下事件NavigationService在 MVVM light 5 上可用 到目前为止 我认为最好的地方是在ViewModelLocator通过注册
  • 嵌入式Python,导入数学错误

    首先我使用的是 Mac OSX 10 12 6 我想在我的 C 应用程序中嵌入 python 环境 我把 github python 项目放在https github com python cpython https github com
  • XAML 页面中的 Bindable 值存在问题

    我有一个保龄球回顾示例代码 其中输入了 3 场比赛并总结在系列列中 我遇到的问题是系列列没有按照我的预期进行更新 显然 我做错了什么 但看不到我做错了什么 以下是支持该应用程序的代码
  • node.js 本机插件 - 包装类的析构函数不运行

    我正在用 C 编写一个 Node js 插件 我使用 node ObjectWrap 包装一些类实例 以将本机实例与 JavaScript 对象关联起来 我的问题是 包装实例的析构函数永远不会运行 这是一个例子 point cc inclu
  • 如何知道机器的堆栈在内存中是向上还是向下增长? (JAVA)

    我有一个 C 程序来检查机器堆栈在内存中是向上还是向下增长 事情是这样的 include
  • C# 在字符串中创建下标

    目前我正在尝试修复我的应用程序中的一些格式 我正在尝试下标string并将其附加到正常的string 与在 MS Word 中执行的操作相同 我已经尝试过这个 正如假设的那样here https en wikipedia org wiki
  • C# 中的新类型定义

    我正在寻找定义新类型并在 C 中使用它的可能性 如下所示 类定义 public class Position public double180 Longitude get set double180 is a type within a r
  • 使用c#在ms access中更新

    有人可以帮助我的代码有什么问题吗 它是一个更新函数 在我的调试过程中它可以正确执行 但它不会更新我的数据库 我已经在寻找这个问题的答案 但仍然没有成功 我还尝试创建一个新的数据库 希望它有问题 但仍然没有效果 private void up
  • 在 Xamarin.Forms 中添加方向更改布局

    我需要实现的是 在将屏幕从纵向更改为横向时向现有页面添加布局 我已经成功地使用检测方向变化void OnSizeAllocation 双倍宽度 双倍高度 但我无法为此事件添加布局 我的示例 C 代码是 public class MyLayo
  • OpenCV 图像处理——C++、C、Python

    我正在考虑在一个项目中尝试 OpenCV 并注意到它有 C C 和 Python 我正在尝试确定是否应该使用 C C 还是 Python 并且希望使用具有最佳 OpenCV 支持的任何语言 仅从查看各种文档的索引页来看 C 绑定可能比其他绑
  • 无堆栈协程与堆栈协程有何不同?

    背景 我问这个问题是因为我目前有一个具有许多 数百到数千 线程的应用程序 这些线程中的大多数在很大一部分时间内处于空闲状态 等待将工作项放入队列中 当工作项可用时 它会通过调用一些任意复杂的现有代码来处理 在某些操作系统配置上 应用程序会遇
  • 如何(自动)生成 MVC + Entity 的 Web api 控制器或基因查询所有类型

    作为 MVC4 Entity WebAPI 的新手 我对仅仅拥有 GET POST 控制器处理程序和到数据模型的自定义映射感到沮丧 我想我要问的是有一个生成工具 例如从数据类创建控制器类 这样我就可以直接从数据执行简单的 GET 命令 制作
  • LINQ to SQL 未映射的属性

    是否可以在设计器中添加自定义属性并且不将其绑定到列 我摆弄了一些设置 决定用该属性创建一个部分类 有没有办法在 ORM 设计器中显示这个字段 LINQ to SQL 设计器正在维护映射 未映射的属性需要放入单独的分部类中
  • 创建新选项卡并管理它们 - Selenium

    这是我的代码 var chromeOptions new ChromeOptions chromeOptions AddArguments headless driver new OpenQA Selenium Chrome ChromeD
  • 如何调节日志指令随时间产生的打印输出量?

    如何将程序日志打印输出限制为 Y 秒内最多 X 个打印输出 使用 java util logging 进行服务器端编程 我的代码有很多信息 警告和错误语句 例如 s logger logp Level WARNING myClassName
  • 在头文件 (.h) 中声明构造函数然后在类文件 (.cpp) 中定义 C++ 的语法 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果有人可以解决这个问题 我将不胜感

随机推荐

  • 错误:添加显式大括号以避免其他内容悬空。 C

    我正在使用 gedit 我的编译器是 clang 我最近遇到了一些这样的错误 但不知道如何修复 标题中的错误并引用了 else 语句 if isupper ptext i if ptext i k 26 52 lt 65 ptext i k
  • 使用 NSURLConnection 进行单元测试

    我想测试一段使用网络的代码 NSURLConnection类 具体而言 代码 我们称之为NetworkManager 看起来有点像这样 id buildConnection some more code and then return NS
  • Scrapy + Splash = 连接被拒绝

    我安装了Splash使用这个link http splash readthedocs io en stable install html 按照所有步骤进行安装 但 Splash 不起作用 My 设置 py file BOT NAME Tes
  • Cocoa:如何制作像 Pages 或 Numbers 中那样的小工具栏?

    Apple 的应用程序 例如 Pages 和 Numbers 总是在主工具栏下方显示一个附加的小工具栏 Interface Builder 中是否有这样的对象 或者我必须从头开始构建它 我查了一下 IB 图书馆 但到目前为止什么也没找到 您
  • Get-Content -wait 无法按照文档中的描述工作

    我注意到当Get Content path to logfile Wait 输出实际上并不是像文档所解释的那样每秒刷新一次 如果我进入 Windows 资源管理器到日志文件所在的文件夹并刷新该文件夹 然后Get Content会将最新更改输
  • 子表 ajax 调用内的 SelectOneRadio 不起作用

    我正在使用 primefaces 3 4 1 并且我正在尝试使用 SelectOneRadio 和 ajax 调用subtable http www primefaces org showcase labs ui datatableSubT
  • 写入文件并处理重复条目

    背景 1 个按钮 1 需要写入的文件 1 个文本框 1 数字上下 因此 在我的应用程序中 我需要写入一个包含多行的文件 输入取自 TextBox 和 NumericUpDown 控件 它包含通用格式的字符串string Format 0 1
  • Azure Active Directory - 存储访问令牌的 MVC 应用程序最佳实践

    我使用 Azure Active Directory AAD 设置了一个简单的 MVC 应用程序 我需要查询 AAD Graph API 才能从我的应用程序管理应用程序角色和组 In the Startup类中 我收到了这样的 Access
  • Spring:如何下载文件?

    我想将 zip 存档从服务器保存到用户计算机 我有一个网页 显示有关该文件的一些信息 并有一个下载按钮 在我的控制器按钮操作中 只需在主页上重定向 但我想从数据库获取数据并将其保存到用户计算机 路径为由用户定义 问题是我不知道如何获得这条路
  • TextInputlayout 在设置错误时将 edittext 变为红色

    我有一个布局 每当我按下提交按钮并在文本输入布局上设置错误时 它会将 editText 变成红色 但我没有在设置错误时在 editText 上设置任何颜色 基本上我只是想在 editText 下面给出错误字符串 而不是在设置错误时将 edi
  • StructLayout 和 FieldOffset 的未定义行为

    我已经使用 PtrToStructure 函数 在 VB NET 中 成功从有效指针中提取了结构对象 但某些对象成员的结果不正确 与 C 示例相比 代码是 StructLayout LayoutKind Explicit pack 1 Ch
  • Facebook 网址中的“?fref=jewel”是什么意思?

    我在 Facebook 上收到了几个来自个人资料的好友请求 其链接以 fref jewel 结尾 所有链接的网址中都有这个结尾词 有些个人资料可能是假的 谁能告诉我 fref jewel 是什么意思 它只是意味着用户单击通知 jewel F
  • 从aws s3 pyspark读取文件数据

    我在 s3 中放置了一个 json 文件 s3 url 类似于以下网址 https s3 eu region 1 amazonaws com dir resources sample json 但在 pyspark 中 当传递相同时 它不会
  • 从其选项卡访问常规 UITabBarController 属性?

    我将描述我想做的事情 我有登录页面 ViewController 登录后 我传递到 UITabBarController MainTabBar m 这个MainTabBar有 key 属性 它从登录页面获取用户密钥 UITabBarCont
  • 如何在运行时修改strings.xml文件

    我将仅动态获取本地化数据 有办法更新吗strings xmlAndroid 运行时文件 我们可以在运行时向文件添加新字符串吗 我们可以在运行时向文件添加新字符串吗 不 您可以创建翻译数据库并维护该数据库 将新翻译动态添加到数据库并从那里读取
  • 开发者拒绝后在新的 iTunes Connect 中提交新的应用程序版本

    我从新 iTunes Connect 的提交队列中删除了我的构建 现在 当我向应用程序商店提交新版本时 它们会显示在 预发布 下 但不会显示在 版本 下 所以现在我的应用程序信息中只显示 1 0 准备出售 1 0 25 开发人员已拒绝 在
  • 在java中将图像转换为二进制数据(0和1)

    我想从 url 读取图像并将其转换为二进制数据 请帮我 byte data null ByteArrayOutputStream bas null try URL u new URL http www eso org public arch
  • /*@cc_on和IE6检测

    在研究 IE 的 JavaScript 条件注释时 我偶然发现了 cc on 这似乎有效 但是 那维基百科条目 http en wikipedia org wiki Conditional comment条件注释提供了以下代码 用于更强大的
  • 如何将 BufferedImage 转换为黑白图像?

    如何将现有的彩色 BufferedImage 转换为单色 我希望图像完全分为两个 RGB 代码 黑色和白色 因此 如果图像周围有一个边框 该边框是背景的较浅或较暗的阴影 并且背景正在转换为白色 那么我希望边框也转换为白色 依此类推 我怎样才
  • 使用 ActionFilter 进行 ASP.NET Core 日志记录

    我正在尝试添加日志记录功能以保存到我的 SQL Server 数据库 我尝试创建 ActionFilter 类并应用于我的控制器之一 但不起作用 我想捕获用户 ID IP 地址 控制器和操作访问以及时间戳 我缺少什么 AuditAttrib