Как получить доступ к данным токена в dbcontext - PullRequest
0 голосов
/ 14 мая 2019

У меня есть приложение web api .net framework 4.6.2, и мы сохраняем учетные данные пользователя в токене.Я перезаписываю dbcontext.savechanges для отслеживания изменений в базе данных.Я хочу получить доступ к userId, который хранится в токене, и в API я могу получить к нему доступ через httpContext.Но контекст HTTP недоступен в dbcontext.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Получает ли System.Web.HttpContext.Current текущий контекст запроса?

Я должен отметить, что добавление материала, который ссылается на это непосредственно в DbContext, является плохим дизайном, хотя ... Вам, вероятно, следует использовать Dependency Injection и управлятьэто через какой-то сервис, срок службы которого ограничен запросом - или, по крайней мере, так я бы это сделал ...

0 голосов
/ 15 мая 2019

Как сказал @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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...