Http 发布并获取 json -C#

Posted

技术标签:

【中文标题】Http 发布并获取 json -C#【英文标题】:Http post and get for json -C# 【发布时间】:2015-10-26 12:38:19 【问题描述】:

如何发出 HTTP 请求并发送带有 Headers 的 Json 数据并读取响应?

第三方提供了一些凭据来使用他们的 API。使用这些凭据,我需要调用 API 并读取响应。我需要发送一个名为 SIGNATURE 的标头以及请求数据。签名的值是加密的请求数据。

我可以发出 POST 请求,但不知道如何添加 Header。

我的代码是这样的

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("URL");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers.Add("SIGNATURE", sEncrypteddata)
using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))

    string json = "\"id\":\"2423432432\"," +
                  "\"uid\":\"id123\","+
                  "\"pwd\":\"pass\","+
                  "\"apiKey\":\"2423432432\","+
                  "\"paymentCategory\":0"+
                   "\"paymentType\":0";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();

System.Net.ServicePointManager.Expect100Continue = false;
HttpWebResponse  httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))

    string result = streamReader.ReadToEnd();

这是正确的方法吗?

【问题讨论】:

我确定之前有人问过这个问题... 【参考方案1】:

我假设您使用 HttpClient 类。 此类有一个名为DefaultRequestHeaders 的属性。 此属性中的所有标头信息都应与您对实例执行的每个请求一起发送。

httpClient.DefaultRequestHeaders.Add("SIGNATURE", "your value");

【讨论】:

【参考方案2】:

您必须在请求流工作之前移动标头,因为请求流正在添加正文。

Webrequest 是在内部实现的,在用 Header 编写 Body 完成之前,一旦它变成流格式,就可以发送了。

在reflector或者类似的反编译工具中实现webrequest,你可以找到逻辑。

【讨论】:

以上是关于Http 发布并获取 json -C#的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 ASMX JSON 服务上设置 HTTP 响应代码并引发异常吗?

如何通过远程方法发送 json-rpc http post 请求并在 java 中传递加密参数

文本/纯文件下载的 Angular http$ 响应失败,并出现 SyntaxError:JSON 中的意外数字

如何发送 JSON 并使用 cURL 检索它?

HTTP 响应、Webhook 和 Json

http, post请求,发送json,并接收数据