【问题标题】:Trying to make an API POST using application/x-www-form-urlencoded in a wpf desktop app尝试在 wpf 桌面应用程序中使用 application/x-www-form-urlencoded 进行 API POST
【发布时间】:2021-09-22 00:40:28
【问题描述】:

我正在为工作创建一个 WPF 桌面客户端,并且需要使用它的 API 从网站获取数据。

此网站 API 需要 POST 请求才能获取数据,而不是 GET。据我所知,这是一项安全功能。

我不知道如何格式化我的请求,因为大多数文档都是针对 application/json 请求的,但我需要使用 application/x-www-form-urlencoded 发布我的请求。

API 将以 JSON 格式响应我需要解析和使用的请求数据。

这是网站有限文档所说的:

API 请求格式 我们的 REST API 基于开放标准,因此您可以使用任何 Web 开发语言来访问 API。

要发出请求,您需要向适用的端点 URL 发出 HTTPS POST。

例如:https://app.agencybloc.com/api/v1/individuals/search

URL 或查询字符串中不应包含任何参数。请求正文必须包含安全凭证以及特定于方法的参数。

注意:API 的响应采用 JSON 格式,如方法描述中所述,但您不发布 JSON 格式的请求。根据上述,它们必须采用 application/x-www-form-urlencoded 格式。

这是我需要发布到网站的内容:

Host: https://app.agencybloc.com/api/v1/individuals/search
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

sid=mySID&key=myKey&updatedDTM=09/20/2021

这是我目前的代码。

    public class tdate
    {
        public string updatedDTM { get; set; }
    }

    public class APIHelper
    {

        public void Main(string[] args)
        {

            HttpClient client = new HttpClient();

            HttpContent content = new FormUrlEncodedContent(
                new List<KeyValuePair<string, string>>()
                );

            content.Headers.ContentType = new MediaTypeHeaderValue("application/x--www-form-urlencoded");
            content.Headers.ContentType.CharSet = "UTF-8";
            content = "sid=mySID&key=myKey&updatedDTM=09/20/2021";
            client.DefaultRequestHeaders.ExpectContinue = false;
            client.BaseAddress = new Uri(https://app.agencybloc.com/api/v1/individuals/search/); 

        }
    }

我觉得我离这里很远。我不知道如何正确完成 POST 请求。我似乎找不到任何明确的文档,关于这个主题的其他问题对我来说都没有意义(作为 C# 中的一个相对新手)。

对于项目的其余部分,我将不得不解析 JSON 响应并使用该数据发出第二个 POST 请求以获取更多数据。

如果我需要提供更多代码或任何其他详细信息,请告诉我。

感谢您的帮助。

编辑: 让它工作。

方法如下:

public static HttpResponseMessage BlocCall()
        {

            HttpClient client = new HttpClient();

            var dict = new Dictionary<string, string>();
            dict.Add("sid", "MyID");
            dict.Add("key", "MyKey");
            dict.Add("lastName", "Heine");

            var req = new HttpRequestMessage(HttpMethod.Post, "https://app.agencybloc.com/api/v1/individuals/search/") { Content = new FormUrlEncodedContent(dict) };
            var res = client.SendAsync(req).Result;
            
            Newtonsoft.Json.JsonConvert.SerializeObject(res, Formatting.Indented);
            Trace.WriteLine(res);
            return res;
        }

这是在按钮单击时调用它的地方:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            APIHelper.BlocCall();
      
        }

【问题讨论】:

    标签: c# wpf post


    【解决方案1】:

    你可以检查类似的东西。

            HttpClient client = new HttpClient();
    
            var dict = new Dictionary<string, string>();
            dict.Add("sid", "mySID");
            dict.Add("key", "myKey");
            dict.Add("updatedDTM", "09/20/2021");
    
            var req = new HttpRequestMessage(HttpMethod.Post, "https://app.agencybloc.com/api/v1/individuals/search/") { Content = new FormUrlEncodedContent(dict) };
            var res =  client.SendAsync(req).Result;
    

    【讨论】:

    • 好的,这看起来很干净,但我仍然收到一个错误,提示“Main(string[] args)”没有参数?
    • 你能发布错误吗?
    • " 没有给出与 'APIHelper.Main(String[])' 所需的形参 'args' 相对应的参数"
    • 当我只使用“Main()”时,我收到错误“非静态字段、方法或属性 'APIHelper.Main()' 需要对象引用”
    • 你的主函数应该看起来像 static void Main(string[] args)
    猜你喜欢
    • 2017-07-19
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2018-10-19
    • 2017-08-26
    • 2020-09-06
    相关资源
    最近更新 更多