如何使用HttpClient通过Post方法从webAPI返回数据?

12 浏览
0 Comments

如何使用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 Task getDataAsync(string path, string data)
    {
        StringContent queryString = new StringContent(data);
        HttpResponseMessage response = await client.PostAsync(path,queryString);
        response.EnsureSuccessStatusCode();
        return response.Headers.Location;
    }

0
0 Comments

问题的出现原因是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获取数据并返回的方法。

0