我试图创建一个非常简单的c#控制台应用程序,将一些数据发布到web api。无论我做什么,我都会在响应中收到错误,如:
responseText" {\" info \":{\" status \":\"失败\",\&#34 ;错误\":{\"代码\":1000,\"消息\":\"来自请求的无效参数\"} }}"串
api http://www.detrack.com/api-documentation/正在寻找像
这样的帖子https://app.detrack.com/api/v1/deliveries/view/all.json?key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&json= {"日期":" 2014年8月29日"}
我知道在chrome高级rest应用程序扩展中使用它会返回有效的结果。但是当我通过这个控制台代码尝试相同的时候。我收到错误!。
以下是我在控制台应用程序中的代码。
using System;
using System.Net;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://app.detrack.com/api/v1/deliveries/view/all.json?key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "json={\"date\":\"2014-08-28\"}";
Console.WriteLine(json);
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
Console.WriteLine(responseText);
Console.ReadKey();
}
}
}
}
非常感谢任何帮助/指导
布伦丹
答案 0 :(得分:0)
所以我在看这个:
string json = "json={\"date\":\"2014-08-28\"}";
根据detrack的简要描述 not 你想要什么。他们期待有效的json,但事实并非如此。以下是你应该考虑的有效json:
string json = "{\"date\":\"2014-08-28\"}";
警告我不知道你逃避报价。我会以不同的方式序列化;强类型类或匿名类。 Anon看起来像这样:
string json = JsonConvert.DeserializeObject(new { date = "2014-08-28" });
不考虑时间,时区,utc等,这将正确地序列化您的结构。这是来自linqpad的一个沙哑的程序:
void Main()
{
var json = Newtonsoft.Json.JsonConvert.SerializeObject(new { date = "2014-08-28"});
Console.WriteLine(json);
}
>>> {"date":"2014-08-28"}
答案 1 :(得分:0)
您可以尝试下面的(未经测试的!)代码。
using System;
using System.Net;
using System.IO;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
var webAddr = "https://app.detrack.com/api/v1/deliveries/create.json";
var httpWebRequest = (HttpWebRequest) WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
string postData = "key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&json={""date"":""2014-08-28""}";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
httpWebRequest.ContentLength = byteArray.Length;
using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(byteArray, 0, byteArray.Length);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();
using(var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
MessageBox.Show(result);
}
}
}
}