使用散列 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);
}
谢谢你的帮助!
我正在尝试对内部 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);
}
谢谢你的帮助!