使用散列 API 密钥通过 c# 发出 POST API 请求

Making POST API request via c# with hashed API Key

我正在尝试对内部 Intranet 上的 Web 服务进行 POST 调用(从 C# WPF 应用程序)(所以我无法提供确切的 URL 抱歉),这基本上是一个 url 缩短服务。

该页面给出了以下说明:


为了使用 API 服务,只需向此 URL 发出 HTTP POST 请求: https://...internalAddress.../api/<方法>

例如,要创建一个片段,请向以下地址发出 HTTP POST 请求: https://...internalAddress.../api/shorten

使用这些参数:

api_key 已注册 API 密钥的哈希值

url URL 待缩短


现在,我尝试通过 google / 此处找到的几种不同方式来实现这一点,这些是:

1:

            string apiKey = "xxxx11112222333";
            string urlForShortening = @"http://www.codeproject.com/Tips/497123/How-to-make-REST-requests-with-Csharp";
            string destination = @"https://internalurl/api/shorten";

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(destination);
            httpWebRequest.ContentType = "text/json";
            httpWebRequest.Method = "POST";                

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write("{'api_key': '" + apiKey + "', 'url': '" + urlForShortening + "'}");
            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var responseText = streamReader.ReadToEnd();
                MessageBox.Show(responseText);
            }

2:(使用在缩短link中找到的文章中创建的rest库)

            string apiKey = "xxxx11112222333";
            string urlForShortening = @"http://www.codeproject.com/Tips/497123/How-to-make-REST-requests-with-Csharp";
            string destination = @"https://internalurl/api/shorten";

            RestClient client = new RestClient(destination, HttpVerb.POST,
                "{'api_key': '" + apiKey + "', 'url': '" + urlForShortening + "'}");
            var json = client.MakeRequest();
            MessageBox.Show(json);

还尝试在双引号中输入 jsonData:

var jsonData = "{\"api_key\": \"" + apiKey + "\", \"url\": \"" + urlForShortening + "\"}";

我总是得到的两种方法的结果是:

{"status": 400, "message": "Missing API key"}

有人可以阐明我做错了什么吗?

根据简介,我认为密钥可能需要以某种形式进行散列处理,但不确定如何进行。

我假设您正在尝试在请求正文中发送 json 数据,以便 POST 调用 API。

不过您似乎没有提供有效的 json。这是您现在要发送的内容:

{'api_key':'someApiKey'}
{'url':'someUrlForShortening'}

使用 json validator 确保您有一个有效的 json 文档,然后再尝试将其发送到 API。

一个有效的 json 应该是

{
  "api_key":"someApiKey",
  "url":"someUrlForShortening"
}

原来我的整个实现是错误的,我试图将数据发送为 JSON / 使用错误的 类 而不是普通的 HTTP POST.

我使用了本文中的方法 2,效果很好:

            using (var client = new WebClient())
            {
                var values = new NameValueCollection();
                values["api_key"] = "xxxx11112222333";
                values["url"] = @"http://www.codeproject.com";
                string destination = @"https://internalurl/api/shorten";
                var response = client.UploadValues(destination, values);
                var responseString = Encoding.Default.GetString(response);
                MessageBox.Show(responseString);
            }

谢谢你的帮助!