RoleProvider从异步方法获取角色

时间:2017-09-29 09:49:36

标签: c# asp.net-mvc asynchronous

我想构建自定义角色。我创建了一个新类:

public class TheRoleProvider : RoleProvider
{
    public override string[] GetRolesForUser(string username)
    {
        DataLayerAccess dal = new DataLayerAccess();
        return dal.GetUserGroups(username);
    }

其他方法返回

throw new NotImplementedException();

在方法GetUserGroups

的代码下面
public string[] GetUserGroups(string UserName)
{
    List<UserGroup> listGroup = 
        PostAsyncRestObject<List<UserGroup>, string>(
            "http://my_server/ServiceCommon.svc/GetUserGroups",
            UserName)
        .Result;

    List<string> strGr = new List<string>();
    foreach (UserGroup ug in listGroup)
    {
        strGr.Add(ug.GroupName);
    }

    return strGr.ToArray();
}

我不明白为什么当调用“PostAsyncRestObject”时,浏览器正在等待某些东西而我无法取回结果。

如果有人能给我一些线索来解决我的问题,谢谢。

1 个答案:

答案 0 :(得分:1)

您应await使用async方法(并可能将其名称更改为GetUserGroups Async ):

public async Task<string[]> GetUserGroupsAsync(string UserName)
{
    List<UserGroup> listGroup = await
        PostAsyncRestObject<List<UserGroup>, string>(
            "http://my_server/ServiceCommon.svc/GetUserGroups",
            UserName).ConfigureAwait(false);

    List<string> strGr = new List<string>();
    foreach (UserGroup ug in listGroup)
    {
        strGr.Add(ug.GroupName);
    }

    return strGr.ToArray();
}

另一种选择是通过调用同步方法替换对异步PostAsyncRestObject方法的调用。你不应该像在这里一样混合异步和同步代码。