【问题标题】:C# Console Application httpWebRequestC# 控制台应用程序 httpWebRequest
【发布时间】:2014-09-09 23:20: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={"date":"2014-08-29"}

我知道在 chrome 高级休息应用程序扩展中使用它会返回有效结果。但是当我通过这个控制台代码尝试相同的时候。我收到错误消息!。

这是我在控制台应用程序中的代码。

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 console-application


    【解决方案1】:

    所以我在看这个:

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

    根据关于 detrack 的简短描述,不是你想要的。他们期待有效的 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"}
    

    【讨论】:

    • 嗨,杰夫,感谢您的反馈。我已经尝试使用您的 json 序列化选项,但我仍然遇到了障碍。我会一直插电。
    【解决方案2】:

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

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

    【讨论】:

    • 嗨,Dason,感谢您发布代码。我已经尝试过,但即使进行了一些小的编辑,我也可以将其发布,但我得到的响应不包含任何有效的 json 数据。我看到的响应是` { "info":{ "status":"ok" },"results":[] } `
    • 如果我想引用存储 csv 文件的 SFTP URL 而不是 JSON,您有解决方案吗?请参考我的问题“stackoverflow.com/questions/35308945/…”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2021-11-14
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多