如何在dbcontext中访问令牌的数据

时间:2019-05-14 20:56:13

标签: c# entity-framework-6 token

我有Web api应用程序.net Framework 4.6.2,我们将用户凭据存储在令牌中。我重写dbcontext.savechanges来跟踪数据库更改。我想访问存储在令牌中的userId,并且可以在api中通过httpContext访问它。但是HTTP上下文在dbcontext中不可用。

2 个答案:

答案 0 :(得分:1)

System.Web.HttpContext.Current是否获得当前的请求上下文?

我应该指出,尽管将直接引用此内容的东西添加到DbContext中是很糟糕的设计……您应该使用Dependency Injection并通过某些服务来管理它,并且该服务的生存期仅限于请求-或在至少那是我要做的...

答案 1 :(得分:0)

正如@GPW所说,这是一个糟糕的设计决定。 要解决这种情况,您需要使用IoC进行注册,例如:

// Autofac
builder.Register(c => new HttpContextWrapper(HttpContext.Current))
            .As<HttpContextBase>()
            .InstancePerRequest();

// Again Autofac 
builder.RegisterModule(new AutofacWebTypesModule());
// Castle Windsor
container.Register(Component.For<HttpContextBase()
                  .LifeStyle.PerWebRequest
                  .UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));

使用控制器进行喷射的控制器:

public class HomeController : Controller
{
    private readonly HttpContextBase _httpContext;

    public HomeController(HttpContextBase httpContext)
    {
        _httpContext = httpContext;
    }
}

因此您注入HttpContextBase以便访问上下文

public class EntitiesContext : DbContext
{

    private readonly HttpContextBase _httpContext;

    public EntitiesContext(HttpContextBase httpContext)
    {
        _httpContext = httpContext;
    }

}