首页 > 解决方案 > 为什么这个 web api 调用没有返回?

问题描述

我的 MVC 应用程序的 Global.asax 中有以下方法:

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e)
{
    SetUserRolesToSession().GetAwaiter().GetResult();
}

protected async Task SetUserRolesToSession()
{
    var networkUserIdParts = networkUserId.Split(new char[] { '\\' });
    var baseUrl = ConfigurationManager.AppSettings["SecurityApiBaseUrl"].ToString();
    var userSearchRequest = new UserSearchRequest
    {
        NetworkUserId = Request.LogonUserIdentity.Name
    };
    var user = (await new SecurityApiServiceWrapper(baseUrl)
        .GetUsersAsync(userSearchRequest)).FirstOrDefault();

    Session["Roles" + "_" + networkUserId] = user?.Groups.Select(x => x.Name).ToList();
}

然后我在 SecurityApiServiceWrapper 中有以下代码:

public async Task<List<User>> GetUsersAsync(UserSearchRequest userSearchRequest)
{
    using (var client = GetHttpClient(_baseUrl))
    {
        var response = await client.PostAsJsonAsync("api/v1/users/search", userSearchRequest);
        if (response.IsSuccessStatusCode)
        {
            var users = await response.Content.ReadAsAsync<List<User>>();
            return users;
        }
        else //not 200
        {
        }
    }
}

public HttpClient GetHttpClient(string baseUrl)
{
    var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
    client.BaseAddress = new Uri(baseUrl);
    client.Timeout = Timeout.InfiniteTimeSpan;
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));
    return client;
}

当代码进入 await client.PostAsJsonAsync 时,进程会卡住并且永远不会返回。我可以通过 Postman 进行相同的 api 调用,并且响应在 < 1s 内返回。知道问题可能是什么或如何调试吗?

标签: c#.netasp.net-web-apiasync-awaitasp.net-web-api2

解决方案


推荐阅读