【问题标题】:How to use HttpClient to return data from webAPI using Post?如何使用 HttpClient 通过 Post 从 webAPI 返回数据?
【发布时间】:2017-10-30 20:46:17
【问题描述】:

我有这个可以使用下面提到的 ajax 调用的 webAPI。 我正在尝试使用 c#HttpClient 实现相同的结果(获取 data.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('<span>' + data.URLs[i] + '</span>');
                    $("#urlelement").append('<br />');
                }
            },
            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<Uri> getDataAsync(string path, string data)
    {
        StringContent queryString = new StringContent(data);
        HttpResponseMessage response = await client.PostAsync(path,queryString);
        response.EnsureSuccessStatusCode();
        return response.Headers.Location;
    }

【问题讨论】:

    标签: c# dotnet-httpclient


    【解决方案1】:

    您没有正确处理 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 的第一部分,您可以为客户端设置一个基本 URL。看看herehere

    【讨论】:

    • 需要如上所述 POST。但改为:' var response = await client.PostAsync(url, null); '奏效了。谢谢。如果你用这个更新你的答案将接受它。
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多