簡體   English   中英

在 ASP.NET Core MVC 中將其用於 ActionFilter 時出現 DbContext 錯誤

[英]DbContext error when using it for ActionFilter in ASP.NET Core MVC

我需要記錄某些用戶操作,例如登錄、注銷、CRUD 等,並保存到名為AuditRecords的表中。 我有一個名為DbContextWebAppContext

public class WebAppContext : DbContext
{
    public WebAppContext(DbContextOptions<WebAppContext> options)
        : base(options)
    {
    }

    public DbSet<NAW> NAW { get; set; }
    public DbSet<Audit> AuditRecords { get; set; }
}

我了解到應用ActionFilter並用它裝飾 controller 是通往 go 的方法。 WebAppContext導致紅色波浪狀詢問“選項”,這讓我感到困惑。 我嘗試過 DI,但得到了相同的結果。 有什么想法嗎? 我在 DotNet 6.01 上。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // CS7036: There is no argument given that corresponds to the formal 
    // parameter 'options' of 'WebAppContext(DbContext<WebAppContext>)'
    using (WebAppContext _context = new WebAppContext())  
    {
        Audit audit = new Audit()
            {
                AuditId = Guid.NewGuid(),
                UserName = (filterContext.HttpContext.User.Identity.IsAuthenticated) ? filterContext.HttpContext.User.Identity.Name : "Anonymous",
                IPAddress = filterContext.HttpContext.Connection.RemoteIpAddress.ToString(),
                AreaAccessed = filterContext.HttpContext.Request.Path,
                Timestamp = DateTime.UtcNow
            };

        _context.AuditRecords.Add(audit);
        _context.SaveChanges();
    } 

    base.OnActionExecuting (filterContext); 
}

WebAppContext期望將DbContext<WebAppContext>傳遞到其構造函數中。 但是,您在不提供任何內容的情況下調用構造函數:

WebAppContext _context = new WebAppContext()

要解決此問題,您只需插入已設置的依賴注入系統即可

public class CustomFilter : IActionFilter
    {
        private readonly WebAppContext _context;
        public CustomFilter(WebAppContext context)
        {
            _context = context;
        }
      
        public void OnActionExecuting(ActionExecutingContext context)
        {
            //.......
                
            _context.AuditRecords.Add(...);
            _context.SaveChanges();
        }
    }

首先,將 Nuget package Microsoft.EntityFrameworkCore.SqlServer添加到您的項目中。 然后,將以下代碼添加到Startup class 的ConfigureServices方法中:

services.AddDbContext<WebAppContext>(options =>
 options.UseSqlServer("[your connectionstring here]"));

這是最低要求,這將使您能夠將 DbContext 注入ActionFilter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM