关于C#通过HttpWebRequest调用web api 接口post 传参的问题
场景是 winform程序通过HttpWebRequest 调用web Api 接口
其中参数没传过去,有做过这东西的,给点建议。
下面贴代码;
下面是调用代码
其中参数没传过去,有做过这东西的,给点建议。
下面贴代码;
/// <summary>
/// 创建POST方式的HTTP请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <param name="parameters">随同请求POST的参数名称及参数值字典</param>
/// <param name="timeout">请求的超时时间</param>
/// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>
/// <param name="requestEncoding">发送HTTP请求时所用的编码</param>
/// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>
/// <returns></returns>
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
}
if (requestEncoding == null)
{
throw new ArgumentNullException("requestEncoding");
}
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.Headers.Add("X_REG_CODE", "288a633ccc1");
request.Headers.Add("X_MACHINE_ID", "a306b7c51254cfc5e22c7ac0702cdf87");
request.Headers.Add("X_REG_SECRET", "de308301cf381bd4a37a184854035475d4c64946");
request.Headers.Add("X_STORE", "0001");
request.Headers.Add("X_BAY", "0001-01");
request.Headers.Add("X-Requested-With", "XMLHttpRequest");
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Accept-Language", "zh-CN");
request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.Accept = "*/*";
if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
else
{
request.UserAgent = DefaultUserAgent;
}
if (timeout.HasValue)
{
request.Timeout = timeout.Value;
}
// if (cookies != null)
// {
request.CookieContainer = new CookieContainer();
// request.CookieContainer.Add(cookies);
// }
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
}
byte[] data = requestEncoding.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
HttpWebResponse res;
try
{
res = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
return res;
}
下面是调用代码
public string GetCookies()
{
string url = "http://localhost:17766/Account/LogOn";
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("StoreCode", "0001");
parameters.Add("UserName", "T00000");
parameters.Add("Password", "123456");
//string postData = "StoreCode=0001&UserName=T00000&Password=123456";
//HttpWebResponseUtility.PostData(postData, url, null);
Encoding encoding = Encoding.GetEncoding("gb2312");
HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(url, parameters, null, null, encoding, null);
String xml = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
return xml;
}
...全文
相关推荐
C#使用Http Post方式传递Json数据字符串调用Web Service
主要为大家详细介绍了C#使用Http Post方式传递Json数据字符串调用Web Service,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
C#上位机对接HTTP POST JSON接口:实战经验与踩坑记录
HTTP协议是互联网数据传输的基石,其中POST方法通过请求体承载结构化数据,与JSON这种轻量级数据交换格式的搭配已成为现代接口对接的事实标准。理解POST与GET的本质区别、JSON的嵌套表达能力,是进行高效通信的前提。在C#开发中,HttpClient作为新一代HTTP客户端,相比传统的HttpWebRequest拥有更简洁的API和更好的连接复用机制,配合System.Text.Json或Newtonsoft.Json可轻松实现对象与JSON的互转。掌握请求编码、超时控制、请求头定制、连接池管理等细
C# 后台请求接口的方法(GET,POST)
C# 后台请求接口的方法(GET,POST)
c# httpwebrequest调用webservice demo
httpwebrequest调用webservice返回数据
浅谈C#中HttpWebRequest与HttpWebResponse的使用方法
本篇文章主要介绍了浅谈C#中HttpWebRequest与HttpWebResponse的使用方法,具有一定的参考价值,有兴趣的可以了解一下。


