我需要在传统的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;
答案 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;
}