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 中传递加密参数