c# WebRequest multipart/form-data GET或POST请求
本文章主要介绍WebRequest
multipart/form-data,POST
和GET
两种请求方式
multipart/form-data POST 传文件或表单参数
使用WebRequest发送multipart/form-data类型请求,传递文件或数据参数
首先我们需要创建一个辅助类MsMultiPartFormData
话不多说,直接上代码,
MsMultiPartFormData
public class MsMultiPartFormData
{
private List<byte> formData;
public String Boundary = "---------------------------7db1851cd1158";
private String fieldName = "Content-Disposition: form-data; name=\"{0}\"";
private String fileContentType = "Content-Type: {0}";
private String fileField = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"";
private Encoding encode = Encoding.GetEncoding("UTF-8");
public MsMultiPartFormData()
{
formData = new List<byte>();
}
public void AddFormField(String FieldName, String FieldValue)
{
String newFieldName = fieldName;
newFieldName = string.Format(newFieldName, FieldName);
formData.AddRange(encode.GetBytes("--" + Boundary + "\r\n"));
formData.AddRange(encode.GetBytes(newFieldName + "\r\n\r\n"));
formData.AddRange(encode.GetBytes(FieldValue + "\r\n"));
}
public void AddFile(String FieldName, String FileName, byte[] FileContent, String ContentType)
{
String newFileField = fileField;
String newFileContentType = fileContentType;
newFileField = string.Format(newFileField, FieldName, FileName);
newFileContentType = string.Format(newFileContentType, ContentType);
formData.AddRange(encode.GetBytes("--" + Boundary + "\r\n"));
formData.AddRange(encode.GetBytes(newFileField + "\r\n"));
formData.AddRange(encode.GetBytes(newFileContentType + "\r\n\r\n"));
formData.AddRange(FileContent);
formData.AddRange(encode.GetBytes("\r\n"));
}
public void AddStreamFile(String FieldName, String FileName, byte[] FileContent)
{
AddFile(FieldName, FileName, FileContent, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
}
public void PrepareFormData()
{
formData.AddRange(encode.GetBytes("--" + Boundary + "--"));
}
public List<byte> GetFormData()
{
return formData;
}
}
最后直接开始进行post
请求即可
/// <summary>
/// 创建合同文档
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="fullName">文件全路径</param>
/// <returns></returns>
public JObject WebRequestPost(string url, string fileName, string fullName)
{
WebRequest request = WebRequest.Create(url);
MsMultiPartFormData form = new MsMultiPartFormData();
FileStream file = new FileStream(fullName, FileMode.Open);
byte[] bt = new byte[file.Length];
file.Read(bt, 0, (int)file.Length);
file.Close();
// 添加文件
form.AddStreamFile("file", fileName, bt);
// 添加表单参数
form.AddFormField("title", fileName.Split('.')[0]);
form.AddFormField("fileType", fileName.Split('.')[1]);
form.PrepareFormData();
// 添加头部信息
request.Headers.Add("x-qys", 'sig');
request.ContentType = "multipart/form-data; boundary=" + form.Boundary;
request.Method = "POST";
Stream stream = request.GetRequestStream();
foreach (var b in form.GetFormData())
{
stream.WriteByte(b);
}
stream.Close();
WebResponse response = request.GetResponse();
Stream s = response.GetResponseStream();
StreamReader sr = new StreamReader(s, Encoding.Default);
string res = sr.ReadToEnd();
// 字符串转JObject对象
jobj = SerializeUtil.JsonDeserialize<JObject>(res);
return jobj;
}
WebRequest GET请求方式
/// <summary>
/// Get
/// </summary>
/// <param name="url">请求地址</param>
/// <returns></returns>
public void Get(string url)
{
// 参数通过url传递
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.ContentType = "multipart/form-data";
// 设置头部信息
WebHeaderCollection header = new WebHeaderCollection();
header.Add("x-qys", 'sig');
req.Headers = header;
// 获取返回字符串数据
WebResponse response = req.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string res = sr.ReadToEnd();
jobj = MyLib.SerializeUtil.JsonDeserialize<JObject>(res);
// 也可以获取流压缩成zip进行保存
string savePath="";// 服务器保存路径
using (WebResponse wr = req.GetResponse())
{
Stream str = wr.GetResponseStream();
#region 获取流生成ZIP文件
using (FileStream fileStream = new FileStream(savePath, FileMode.Create, FileAccess.Write))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = str.Read(data, 0, data.Length);
if (size > 0)
{ fileStream.Write(data, 0, size); }
else
{
break;
}
}
}
#endregion
}
}
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现