我正在处理一个传统MVC应用程序,该应用程序最初通过自定义类和实现进行了表格身份验证。我已经对其进行了修改并利用ASP.NET身份,该身份正在按预期工作。
我现在的要求是,该MVC应用程序不再应该直接访问数据库。因此,我已经从Web.config删除了连接字符串,并一直在考虑通过呼叫我的Web服务进行所有数据库调用(ASP.NET Web API(。
我有:
的自定义类-
UserStore
-
RoleStore
- etc
请注意,我有一个自定义用户类,因为它是自定义用户表。
问题
1(实现我的目标的正确方法吗?我很可能会覆盖许多以前使用IdentityDbContext的方法,例如:
public override Task<CustomUser> FindByIdAsync(int usrID)
public override Task<Customer> FindByNameAsync(string userName)
2(我发现
findbyNameAsync((
正在按预期工作,并且用户正在传递给方法,但是FindbyIdAsync((将用户ID作为0。
致电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(以及需要根据需要的其他接口(,为此,互联网上有很多答案和指南。一个好的起点是:
https://learn.microsoft.com/en-us/aspnet/istentity/endesity/extensibility/overview-obsom-custom-custom-storage-providers-for-aspnet-sideity