我有一个在 ASP.NET MVC 5 框架之上使用 c# 编写的应用程序。
ValidateCookieValueAction
我通过继承ActionFilterAttribute
类创建了一个自定义操作过滤器(即)。我正在ValidateCookieValueAction
为我的多个操作方法使用属性。
过滤器的目的是确保用户在允许他们进行操作之前拥有 cookie 值。尽管存在安全问题,但过滤器效果很好。但是,在允许用户进入之前,需要验证 cookie 值本身。
为了验证 cookie 值,我需要一个实例,DbContext
这样我就可以查询数据库并验证 cookie 值。
DbContext
我知道我可以直接在 ActionFilter 内创建一个新实例。但是,我想这样做。我希望能够传递DbContext
我已经从控制器创建的实例,以允许我重用我已经在控制器中建立的连接。
这是我的控制器的设置方式
public class BaseController
{
protected IDbContext Context { get; private set; }
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
Context = new DbContext();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Context.Dispose();
}
base.Dispose(disposing);
}
}
public class TestController : BaseController
{
[ValidateCookieValueAction]
public ActionResult Index()
{
// the uses is in!
return View();
}
}
这是我的动作过滤器类
public class ValidateCookieValueAction : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
var cookie = new CookieJar(filterContext.HttpContext);
if (!cookie.Has(ContactListCookieName))
{
var Url = new UrlHelper(filterContext.RequestContext);
var url = Url.Action("Guest", "Test");
filterContext.Result = new RedirectResult(url);
}
}
}
如何将 my 的实例传递Context
给ValidateCookieValueAction
?