编译器错误消耗Web API调用

时间:2015-03-27 16:18:40

标签: c# asp.net asp.net-web-api

我需要在传统的ASP.Net Web窗体应用程序中实现webapi调用 我知道并不是所有的使用方法都需要这种方法,但它们适用于页面上的其他方法,其中包括其中一个方法导致问题。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;

private string GetToken(string Username, string IpAddress)
    {
        string result = string.Empty;

        HttpClient client = new HttpClient();

        client.BaseAddress = new Uri(SSOApiUri);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync("api/yourcustomobjects").Result;
        if (response.IsSuccessStatusCode)
        {
            ***var data = await response.Content.ReadAsStringAsync();***
            var token = JsonConvert.DeserializeObject<GetSSOTokenResponse>(data);
            result = token.Token;
        }

        return result;
    }

当我尝试编译我的应用程序时,我在empceized行得到以下错误:

  

错误19'await'运算符只能在异步方法中使用。   考虑使用'async'修饰符标记此方法并进行更改   它的返回类型为'Task&lt;串GT;”

我正在尝试实现类似于this question中找到的解决方案,但它失败了。我需要调用WebAPI方法,并将结果的一部分作为字符串返回...而不是任务&lt;串GT;

1 个答案:

答案 0 :(得分:2)

错误很简单。您必须使用async方法才能使用await关键字。作为编译器的结果,您的返回值将自动包装在Task中。请注意,.Result也可以更改为等待。 Here's the Microsoft documentation on the async/await keywords

private async Task<string> GetToken(string Username, string IpAddress)
{
   string result = string.Empty;

    HttpClient client = new HttpClient();

    client.BaseAddress = new Uri(SSOApiUri);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = await client.GetAsync("api/yourcustomobjects");
    if (response.IsSuccessStatusCode)
    {
        var data = await response.Content.ReadAsStringAsync();
        var token = JsonConvert.DeserializeObject<GetSSOTokenResponse>(data);
        result = token.Token;
    }

    return result;
}