如何使用HttpClient通过Post方法从webAPI返回数据?
如何使用HttpClient通过Post方法从webAPI返回数据?
我有一个可以使用下面提到的ajax调用的webAPI。
我试图使用c#的HttpClient
实现相同的结果(获取数据.URLs)。
这是一个获取数据的POST请求。
无论我创建什么,都会遇到404错误。
以下是代码:
$.ajax({
type: "POST",
crossOrigin: true,
headers: { "Authorization-Token": "someToken" },
url: https://someURl?Param1=" + Val1 + "&Param2=" + Val2 + "&Param3=" + Val3,
contentType: false,
processData: false,
data: data,
success: function (data) {
document.getElementById("message").innerHTML = data.Message;
$("#urlelement").empty();
for (var i = 0; i < data.URLs.length; i++) {
$("#urlelement").append('' + data.URLs[i] + '');
$("#urlelement").append('');
}
},
error: function (data, errorThrown, status) {
alert(data.responseText);
}
});
});
到目前为止我的代码:
我知道我没有返回任何值,只是想得到一个有响应的点。不知道字符串内容是否应该这样创建,也不适用于这种情况。
static HttpClient client = new HttpClient(); static string token = "some values" static void Main() { RunAsync().Wait(); } static async Task RunAsync() { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain")); client.DefaultRequestHeaders.Add("Authorization-Token", token); string Param1 = "val1"; string Param2 = "val2"; int Param3 = val3; var requestString = "https://someUrl?"; var dataString = String.Format("Param1={0}Param2={1}Param3={2}", val1, val2, val3); var url = await getDataAsync(requestString, dataString); } static async TaskgetDataAsync(string path, string data) { StringContent queryString = new StringContent(data); HttpResponseMessage response = await client.PostAsync(path,queryString); response.EnsureSuccessStatusCode(); return response.Headers.Location; }
问题的出现原因是URL的部分没有正确地进行处理。
解决方法是使用HttpClient来发送POST请求,同时正确地设置URL的各个参数。
具体的代码如下:
var http = new HttpClient(); var url = String.Format("https://someUrl?Param1={0}&Param2={1}&Param3={2}", val1, val2, val3); var response = await http.PostAsync(url, null); var result = await response.Content.ReadAsStringAsync();
另外,如果不想每次都创建URL的前半部分,可以为HttpClient设置一个基础URL。可以在这里查看和查看相关信息。
需要注意的是,需要使用POST请求,如果更改为以下代码即可:
var response = await client.PostAsync(url, null);
以上就是使用HttpClient从WebAPI获取数据并返回的方法。