繁体   English   中英

通过Web Api连接到数据库的Asp.Net身份

[英]Asp.Net Identity connecting to DB via Web Api

我正在使用旧的MVC应用程序,该应用程序最初通过自定义类和实现进行表单身份验证。 我已经对其进行了修改,并利用了按预期工作的Asp.Net Identity。

我现在的要求是该MVC应用程序不再应该直接访问数据库。 因此,我从web.config中删除了连接字符串,并一直在考虑通过对我的Web服务(Asp.Net Web Api)的调用来进行所有数据库调用。

我有以下自定义类:

  • UserStore
  • RoleStore
  • 等等

请注意,我有一个自定义用户类,因为它是一个自定义用户表。

问题

1)是实现我目标的正确方法吗? 我可能会覆盖许多以前使用IdentityDBContext的方法,例如:

public override Task<CustomUser> FindByIdAsync(int usrID)

public override Task<Customer> FindByNameAsync(string userName)

2)我发现

FindByNameAsync()

正在按预期方式工作,并且用户正在传递给方法,但是FindByIdAsync()将用户ID传递为0。为什么FindByIdAsync()没有传递我的实际用户ID?

要调用FindByIdAsync()我正在实现UserStore:

public class CustomUserStore : UserStore
    <
        CustomUser, 
        CustomRole, 
        int,
        CustomUserLogin, 
        CustomUserRole, 
        CustomUserClaim
    >
{

然后覆盖FindByIdAsync():

public override Task<CustomUser> FindByIdAsync(int usrID)
    {
        var response = client.GetAsync("api/user/" + usrID).Result.Content;
        return response.ReadAsAsync<CustomUser>(
             new List<MediaTypeFormatter> {
                new XmlMediaTypeFormatter(),
                new JsonMediaTypeFormatter()
            });
        //return base.FindByIdAsync(userId);
    }

问题是usrID为0。

我现在有这个工作,所以我的mvc应用程序正在使用AspNet.Identity,但是对于所有数据库调用,它都在调用我的api。 解决方案的确是实现IUserStore(以及所需的其他接口),为此,Internet上有很多答案和指南。 一个好的起点是:

https://docs.microsoft.com/zh-cn/aspnet/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM