【问题标题】:Custom implementation of ASP.NET IdentityASP.NET Identity 的自定义实现
【发布时间】:2016-04-12 11:05:57
【问题描述】:

我正在使用各种资源来尝试使用 MS Access 为 AngularJS 应用程序实现身份系统。 我创建了实现我需要的身份接口的类,但我被困在创建帐户控制器的阶段(这将是用于注册、登录等的 API)。

UserStore 类实现了IUserStore 并具有CreateAsync 方法:

public Task CreateAsync(TUser user)
{
    if (user == null)
    {
        throw new ArgumentNullException("user");
    }

    var result = userTable.Insert(user);

    return Task.FromResult(result);
} 

AccountController 实现了ApiController 并具有Register 方法:

[AllowAnonymous]
[Route("register")]
public async Task<IHttpActionResult> Register(IdentityUser user)
{
    var result = await _userStore.CreateAsync(user);

    if (result == 0)
    {
        return InternalServerError();
    }

    return Ok();
}

userTable.Insert(user) 返回一个int 指示数据库表中受影响的行数。 var result = await _userStore.CreateAsync(user); 行抛出一个错误,说它实际上返回了void,因此void 不能分配给var(或其他任何东西)。

我很难理解如何编写Register 方法和CreateAsync 方法,以便它们能够协同工作。

顺便说一句,我想我应该放弃整个async 的东西,只让CreateAsyncRegister 按原样返回int 值,但我不能这样做,因为UserStore 实现了`IUserStore' .

【问题讨论】:

标签: c# async-await task asp.net-web-api2 identity


【解决方案1】:

问题是不能从CreateAsync 传递返回类型,因为它只是一个Task 返回。它需要是Task&lt;int&gt;,但你不能这样做,因为它正在实现IUserStore 接口。为什么你需要结果,我假设你不需要?

试试这个:

[AllowAnonymous]
[Route("register")]
public async Task<IHttpActionResult> Register(IdentityUser user)
{
    await _userStore.CreateAsync(user);
    return Ok();
}

此外,如果可能,请考虑将userTable.Insert(user) 调用为async

我建议不要放弃async/await。特别是对于像这样的网站上的 I/O 绑定操作,它们确实使您的应用程序可用。

如果您真的担心插入是否有问题,请尝试以下方法:

public async Task CreateAsync(TUser user)
{
    if (user == null)
    {
        throw new ArgumentNullException("user");
    }

    var existingUser = await this.FindByIdAsync(user.Id);
    if (existingUser != null)
    {
        await this.UpdateAsync(user);
    }
    else
    {
        userTable.Insert(user);
    }
}

【讨论】:

  • 你能帮我解决这个问题吗:stackoverflow.com/questions/39275597/…
  • @Learning 如果您的目标是 ASP.NET 而不是 ASP.NET Core,我对此并不熟悉...我一直在研究一个巨大的 ASP.NET Core 项目,因此可以这么说,我更了解这个框架。
  • 是的,我的目标是 asp.net 核心,你的这个答案表明你对 Microsoft asp.net 身份有很好的理解。你能给我任何关于如何更新使用 Microsoft 身份散列的密码的想法或建议吗在数据库表中??
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多