Web Api 2.0项目在哪里存储新用户(使用单独的用户身份验证创建时)?

时间:2014-02-09 15:31:15

标签: c# entity-framework asp.net-web-api asp.net-mvc-5 asp.net-identity

我创建了一个包含MVC 5项目和WebAPI 2.0项目的解决方案,MVC项目设置为使用No authentication设置,WebAPI项目设置为使用individual users authentication设置。我还在我的MVC项目中添加了我的WebAPI项目的引用,并将解决方案配置为使用MVC项目,因为它的启动 - 导航栏中的按钮将我带到MVC控制器返回给我的视图,但访问时{ {1}}我得到了XML结果,所以我知道我的配置是有效的。我的目标是使用我的MVC项目只返回/api/values个视图,这些视图将使用JQuery ajax调用WebAPI来获取数据,并将返回的数据与.cshtml绑定。

话虽这么说,我想使用新Knockout.js API提供的所有安全功能,但在使用IUA(单个用户身份验证)创建WebAPI项目和创建MVC项目方面存在很大差异。与IUA。当我创建WebAPI项目时,我没有从Identity派生ApplicationUser类,我的API控制器也没有使用引用IdentityUser上下文的构造函数,这与MVC项目非常明显相似如何创建用户。 以下是控制器代码的不同之处:

IdentityDB

..和MVC控制器:

 public class AccountController : ApiController
{
    private const string LocalLoginProvider = "Local";

    public AccountController()
        : this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
    {
    }

    public AccountController(UserManager<IdentityUser> userManager,
        ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
    {
        UserManager = userManager;
        AccessTokenFormat = accessTokenFormat;
    }
}...

为什么public class AccountController : Controller { public AccountController() : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new IdentityDb()))) { } public AccountController(UserManager<ApplicationUser> userManager) { UserManager = userManager; } public UserManager<ApplicationUser> UserManager { get; private set; } }... 中没有DbContext? ApiController在执行UserManager方法(?)时存储新用户的位置:

Register

最终,我想让我的用户实体驻留在我的WebApi项目中(包含数据库访问逻辑),或者更好地让我们的类库处理所有数据库访问。如何获取或创建与public async Task<IHttpActionResult> Register(RegisterBindingModel model) { if (!ModelState.IsValid) { return BadRequest(ModelState); } User user = new User { UserName = model.UserName }; IdentityResult result = await UserManager.CreateAsync(user, model.Password); IHttpActionResult errorResult = GetErrorResult(result); if (errorResult != null) { return errorResult; } return Ok(); } 创建的用户一起使用的DbContext实例,并且可以共享该上下文以容纳与用户相关的其他实体? 我意识到这个问题非常广泛,没有一种正确的方法可以设计一个多层应用程序,但我觉得用户应该是一个“核心”数据库实体,与所有其他实体相同,并由同一层处理其他人,所以我决定尝试使用ApiController API提供的样板代码,但同时希望有一些灵活性并将用户视为核心实体。

1 个答案:

答案 0 :(得分:3)

您可以在WebAPI应用程序中使用与MVC模板相同的代码。在您的情况下,由于WebAPI模板使用Identity Framework中的IdentityUser和IdentityDbContext,因此应用程序将使用默认值并使用EF将用户信息存储在数据库中。默认使用的连接字符串名称为&#34; DefaultConnection&#34;所以你可以添加一个连接字符串名称并指定要使用的确切值。