我正在研究一个传统的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()正在将userid传递为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。
答案 0 :(得分:0)
我现在有这个工作,所以我的mvc应用程序正在使用AspNet.Identity但是对于所有数据库调用它正在调用我的api。解决方案确实是实现IUserStore(以及其他所需的接口),因此Internet上有很多答案和指南。一个很好的起点是: