在session_start中调用webapi

时间:2015-08-31 22:06:18

标签: asp.net-mvc asp.net-web-api

我需要在Session_Start的{​​{1}}事件中获取用户个人资料。

通过Global.asax.cs从WebAPI端点检索用户配置文件数据。

当单步执行代码时,响应是:

  

Status = WaitingForActivation

我不知道如何激活"异步响应并将数据反序列化到我的模型类中。这是我的代码在普通的MVC控制器中工作,但是这个需要在HttpClient中执行。谢谢你的帮助。

Session_Start

1 个答案:

答案 0 :(得分:2)

问题在于您是从非异步方法调用异步方法。

将您的WebAPI调用放入其自己的异步函数中:

private async Task<myMVC.Models.WebApiUserModel> GetUserVMAsync(string svcParameter)
{
    var httpClient = WebHelper.WebApiBorker.GetClient();
    myMVC.Models.WebApiUserModel UserVM = new myMVC.Models.WebApiUserModel();

    //make webapi call to webapi/user 
    var response = await httpClient.GetAsync(svcParameter);
    if(response.IsSuccessStatusCode)
    {
        string content = await response.Content.ReadAsStringAsync();
        UserVM = JsonConvert.DeserializeObject<myMVC.Models.WebApiUserModel>(content);
    }

    return UserVM;
}

然后使用ContinueWithSession_Start调用该函数:

GetUserVMAsync(svcParameter).ContinueWith(result => {
    //Do something with the UserVM that was returned
};

或者同步调用它:

var vm = GetUserVMAsync(svcParameter).Result;