C#控制台应用程序httpWebRequest

本文关键字:httpWebRequest 应用程序 控制台 | 更新日期: 2023-09-27 18:21:13

我试图创建一个非常简单的c#控制台应用程序,将一些数据发布到web api。然而,无论我做什么,我都会收到一个错误,比如:

responseText"{''"info''":{''"status''":''"failed''",''"error''":{''"code''":1000,''"message''":"来自请求的无效参数''"}}"字符串

apihttp://www.detrack.com/api-documentation/正在寻找类似的帖子

https://app.detrack.com/api/v1/deliveries/view/all.json?key=dab13cc0094620102d89f06c0e464b7de0782bb979258d3a&json={"日期":"2014-08-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();
        }

    }
}
}

如有任何帮助/指导,将不胜感激

布伦丹

C#控制台应用程序httpWebRequest

所以我看到的是:

string json = "json={'"date'":'"2014-08-28'"}";

根据Detack上的简短描述,这不是你想要的。他们期望的是有效的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"}

您可以尝试下面的(未测试的!)代码。

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);
            }
        }
    }
}