1

我想使用Parse Library对用户进行身份验证。

这是我想让它成为异步的方法,因为 api 调用仅支持异步调用。我是 MVC 和 aysc/await 功能的新手。现在的问题是它进入 await 方法并且永远不会返回结果并且无法加载视图。

我花了很多时间理解并尝试使用不同的选项,但还没有成功。

我需要使用 Partialviews 还是可以在 ValidateUser 方法中完成某些事情。任何示例代码都非常感谢。谢谢。

AccountController.cs

  public ActionResult Login(LoginModel model, string returnUrl)
    {

             if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
                {
                    var loggedIn = true;
                }
        return  View(model);
    }

ParseMembershipProvider : ExtendedMembershipProvider

public override bool ValidateUser(string username, string password)
    {

        var pUserRepo = new PUserRepository();
        bool flag = false;
        var requiredUser = pUserRepo.GetUserObjByUserName(username, password );


        if (requiredUser.Result != null)
            flag = true;

        return flag;

    }

PUserRepository.cs

 public async  Task<ParseUser> GetUserObjByUserName(string userName, string passWord)
{
    return await ParseUser.LogInAsync("test1", "test123");
}
4

2 回答 2

4

由于我在我的博客上解释,Result您看到了僵局情况。

不幸的是,会员提供者(还)不知道async。所以尝试ConfigureAwait(false)在你的方法中到处使用async

public async  Task<ParseUser> GetUserObjByUserName(string userName, string passWord)
{
  return await ParseUser.LogInAsync("test1", "test123").ConfigureAwait(false);
}

(与您拥有的任何其他async方法相同)。

于 2013-03-25T12:57:17.107 回答
3

解决方案是

return Task.Run(() => ParseUser.LogInAsync(userName, passWord)).Result;

所以基本上我有异步方法调用的同步包装器。我从文章中了解到,这还取决于 Parse 库中的函数如何使用 await 或 configureawait(false)。

于 2013-03-28T09:35:38.163 回答