2016-03-19 3 views
2

Я пытаюсь запустить задания очистки из моей лазурной Webjob для моего приложения mvc. Я могу делать стандартные обновления баз без проблем, но я не могу очистить учетные записи aspnetuser, так как я не могу получить контекст ApplicationUser как никакой класс запуска для Owin.Identity 2.0/Owin/ApplicationUser от azure Webjob

У кого-нибудь есть идеи о том, как это можно сделать или какой-нибудь фиктивный код? До сих пор мои поисковые запросы google были пустыми.

Спасибо.

ответ

2

Я бегу ASP.net MVC 5 с VS 2015

На самом деле, даже если ApplicationUserManager требует OwinContext, вы можете избавиться от OwinContext. OwinContext полезен только для доступа к ApplicationDbConbtext, который связан с OWinContext.

Так что я переработан на Create фабричные методы ApplicationUserManager для того, чтобы иметь возможность управлять пользователями, при запуске (или в WebJob), без каких-либо OwinContext:

public static ApplicationUserManager Create(
        IdentityFactoryOptions<ApplicationUserManager> options, 
        IOwinContext context) 
{ 
    ApplicationDbContext dbContext = context.Get<ApplicationDbContext>(); 
    return Create(options, dbContext); 
} 

internal static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, Applicatio 
{ 
    // Create ApplicationUserManager myself instead of finding it on OwinContext 
    var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context)); 

    // old code already generated by VS wizard 
} 

Тогда я использую ApplicationUserManager:

using (ApplicationDbContext applicationDbContext = new ApplicationDbContext()) 
{ 
    var options = new IdentityFactoryOptions<ApplicationUserManager> 
    { 
     //DataProtectionProvider = app.GetDataProtectionProvider(), 
    }; 
    ApplicationUserManager userManager = ApplicationUserManager.Create(options, applicationDbContext); 
    // ApplicationRoleManager has been changed the same way to be usable without OwinContext 
    ApplicationRoleManager appRoleManager = ApplicationRoleManager.Create(applicationDbContext); 

    // ... Code using ApplicationUserManager and ApplicationRoleManager 
    ApplicationUser appUser = userManager.FindByEmailAsync(email).Result; 
    // ... 
    IdentityResult result = userManager.CreateAsync(appUser, password).Result; 

    } 
} 

Надеюсь, это поможет

Смежные вопросы