ASP.. NET Web Forms:发出外部API请求并在页面上显示响应



我发现了很多关于ASP的帖子。. NET Web API,但对经典的Web表单却一无所知。我想调用一个外部API,并在网页文本字段显示其结果。但是,即使API调用成功,也没有收到响应(或者至少没有在页面上显示)。

c# code behind:

protected void btnOptimize_Click(object sender, EventArgs e) {
Optimize();
}
public async Task Optimize() {
string URI = "https://EXTERNAL_API_BASE_URL/POST";
string auth = "Bearer XXXX";
var client = new HttpClient();
MyData data = new MyData();
data.text = "Hello world";
string requestBody = JsonConvert.SerializeObject(data);
var stringContent = new StringContent(requestBody);
client.DefaultRequestHeaders.Add("Content-Type", "application/json");
client.DefaultRequestHeaders.Add("Authorization", auth);
var response = await client.PostAsync(URI, stringContent);
//display on page's text field
txtResponse.Value = response.Content.ToString();
}

ASP。NET页面:

<body>
<form id="form1" runat="server">
<div>
<textarea runat="server" id="txtInput"></textarea>
<asp:Button ID="btnOptimize" runat="server" OnClick="btnOptimize_Click" Text="Generate" />
<textarea runat="server" id="txtResponse"></textarea>
</div>
</form>
</body>

我应该怎么做?我应该添加一个UpdatePanel到我的ASP。网络页面?

使用ReadAsStringAsync()读取HttpClient的响应

string responseBody = await response.Content.ReadAsStringAsync();

请参见HttpClient Class

因为Optimize方法是异步的,所以尝试像这样修改代码:

//First change the method so it's async as well.
protected async Task btnOptimize_Click(object sender, EventArgs e) {
//Then call the Optimize() method using the await keyword.
await Optimize();
}
public async Task Optimize() {
string URI = "https://EXTERNAL_API_BASE_URL/POST";
string auth = "Bearer XXXX";
var client = new HttpClient();
MyData data = new MyData();
data.text = "Hello world";
string requestBody = JsonConvert.SerializeObject(data);
var stringContent = new StringContent(requestBody);
client.DefaultRequestHeaders.Add("Content-Type", "application/json");
client.DefaultRequestHeaders.Add("Authorization", auth);
var response = await client.PostAsync(URI, stringContent);
//display on the page's text field
//You should get value using the await keyword.
//response.content also has a method called ReadAsStringAsync(),
//it should be visible if you are using intellisense in VisualStudio
txtResponse.Value = await response.Content.ReadAsStringAsync();
}

最新更新