[英]DbContext error when using it for ActionFilter in ASP.NET Core MVC
我需要記錄某些用戶操作,例如登錄、注銷、CRUD 等,並保存到名為AuditRecords
的表中。 我有一個名為DbContext
的WebAppContext
:
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.