通过C#的HttpClient模拟提交form()表单
2021-05-14 08:29
标签:headers 字符 ext ndt 集合 inpu mes 提交 date post提交表单一般无非是一般text文本和文件类型,如下 如果模拟post提交表单的过程,该怎么做呢 这里就需要用到HttpClietn类 首先我们需要一个类去包装这些需要上载的数据,例如 请求帮助类: 需要特别注意: 如果是上传的文件类型,一定不能在塞入StreamContent数据前对文件进行注入下面操作 通过C#的HttpClient模拟提交form()表单 标签:headers 字符 ext ndt 集合 inpu mes 提交 date 原文地址:http://www.cnblogs.com/xiaoliangge/p/7522828.htmlinput type="file"/>
input type="text"/>
///
///
SendToWebByHttpClient("www.....",new SendData{ FileList =要提交的数据,
File=要提交的数据,
ByteBinary=要提交的数据,
.
.
.
.
. }) ///
//遍历SendData的所有成员
foreach (var item in modelType.GetProperties())
{
HttpContent content;
//如果是文件类型,在此之前不能进行诸如copy等读取操作,否则在此字节丢失,无法读到字节数据
//文件的处理
if (item.PropertyType == typeof(HttpPostedFileBase) && item.GetValue(value) != null)
{
#region Stream请求
//Stream塞进Content会导致接受方读取时ContentLength为0,字节丢失
var model = (HttpPostedFileBase)item.GetValue(value);
content = new StreamContent(model.InputStream, model.ContentLength);
content.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
content.Headers.ContentLength = model.ContentLength;
formData.Add(content, item.Name, model.FileName);
#endregion
#region 字节方式请求
//var model = (HttpPostedFileBase)item.GetValue(value);
//MemoryStream fileTarget = new MemoryStream();
//model.InputStream.CopyTo(fileTarget);
//content = new ByteArrayContent(fileTarget.ToArray());
//content.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
//content.Headers.ContentLength = model.ContentLength;
//formData.Add(content, item.Name, model.FileName);
#endregion
}
//文件的处理
else if (item.PropertyType == typeof(HttpPostedFileWrapper) && item.GetValue(value) != null)
{
#region Stream请求
var model = (HttpPostedFileWrapper)item.GetValue(value);
content = new StreamContent(model.InputStream, model.ContentLength);
content.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
content.Headers.ContentLength = model.ContentLength;
formData.Add(content, item.Name, model.FileName);
#endregion
#region 字节方式请求
//var model = (HttpPostedFileWrapper)item.GetValue(value);
//MemoryStream fileTarget = new MemoryStream();
//model.InputStream.CopyTo(fileTarget);
//content = new ByteArrayContent(fileTarget.ToArray());
//content.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType);
//content.Headers.ContentLength = model.ContentLength;
//formData.Add(content, item.Name, model.FileName);
#endregion
}
//文件集合的处理
else if (item.PropertyType == typeof(ListHttpPostedFileBase file = item;//你的文件
PictureListType pictureListType = new PictureListType();
MemoryStream target = new MemoryStream();
file.InputStream.CopyTo(target);//进行此操作后,在之后发起请求时读此文件流会失败,ContentLength=0
pictureListType.PictureBinary = target.ToArray();
文章标题:通过C#的HttpClient模拟提交form()表单
文章链接:http://soscw.com/index.php/essay/85536.html