首页 > 编程语言 >C# 上传文件被D盾防火墙拦截

C# 上传文件被D盾防火墙拦截

时间:2024-08-24 13:49:39浏览次数:11  
标签:文件 fileCollection C# 防火墙 key NameValueCollection var new 上传

服务器装了D盾。部署了上传文件的接口。用PostMan工具调用可以正常调用。用C#调用提示403被拦截。

于是只能用Fiddler进行抓包比较两个请求的差距

PostMan的请求

 C#的请求

找到问题点就是引号有问题。进行处理跟PostMan一致即可完成文件上传

1.封装方法

/// <summary>
/// 使用multipart/form-data方式上传文件及其他数据
/// </summary>
/// <param name="hea eders">请求头参数</param>
/// <param name="nameValueCollection">键值对参数</param>
/// <param name="fileCollection">文件参数:参数名,文件路径</param>
/// <returns>接口返回结果</returns>
public static object PostMultipartFormData(string url, Dictionary<string, string> headers, NameValueCollection nameValueCollection, NameValueCollection fileCollection)
{
using (var httpClient = new HttpClient())
{
foreach (var item in headers)
{
httpClient.DefaultRequestHeaders.Add(item.Key, item.Value);
}

var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
var contentType = "multipart/form-data; boundary=" + boundary;
var content = new MultipartFormDataContent(boundary);

//处理文件内容
string[] fileKeys = fileCollection.AllKeys;
foreach (string key in fileKeys)
{
byte[] bmpBytes = File.ReadAllBytes(fileCollection[key]);
var fileContent = new ByteArrayContent(bmpBytes);//填充文件字节
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "\"" + key + "\"",
FileName = "\"" + Path.GetFileName(fileCollection[key]) + "\""

};
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
content.Add(fileContent);
}

// 键值对参数
string[] allKeys = nameValueCollection.AllKeys;
foreach (string key in allKeys)
{
var dataContent = new ByteArrayContent(Encoding.UTF8.GetBytes(nameValueCollection[key]));
dataContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "\"" + key + "\""
};
content.Add(dataContent);
}
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", contentType);


var boundaryValue = content.Headers.ContentType.Parameters.Single(p => p.Name == "boundary");
boundaryValue.Value = boundaryValue.Value.Replace("\"", String.Empty);

var result = httpClient.PostAsync(url, content).Result;//post请求
string data = result.Content.ReadAsStringAsync().Result;
return data;//返回操作结果

}
}

2.方法调用

using var httpClient = new HttpClient();

Dictionary<string, string> headers = new Dictionary<string, string>();

//键值对参数
NameValueCollection nameValueCollection = new NameValueCollection();
//文件参数
NameValueCollection fileCollection = new NameValueCollection();
fileCollection.Add("file", "C:\\Users\\Admin\\Desktop\\aaa\\150321.xlsx");//文件

//除file文件外的其他参数

nameValueCollection.Add("savePath", "xxxx");
object result = PostMultipartFormData("url", headers, nameValueCollection, fileCollection);

标签:文件,fileCollection,C#,防火墙,key,NameValueCollection,var,new,上传
From: https://www.cnblogs.com/zhumengmeng/p/18377687

相关文章

  • CMake构建学习笔记2-zlib库的构建
    目录1.概述2.详论2.1设置构建目录2.2配置构建2.3构建项目2.4安装项目2.5清理构建目录3.总结1.概述Zlib是一个数据压缩库,它提供了在内存中对数据进行压缩和解压缩的功能。这个库非常泛用,除了直接使用这个库之外,很多依赖库都会间接依赖它。这里就以Windows系统为例介绍一......
  • CodeForces - 1353D Constructing the Array
    CodeForces-1353D这道题也可能比较简单,主要是要想到优先队列要怎么使用,这一点如果用递归会写不了但是因为对优先队列不太熟悉,只有被提示可以用优先队列才想到要怎么用,还是很重要的STL注意运算符的重构应该反着来写其他的思维很朴素,运算符的重构就是,先比较长度,优先用长度长......
  • YSP_refs_cn_2017_其他关节炎及PsO
    rhTNFR-Fc中文文献-2017-其他炎性关节炎及PsO 银屑病关节炎 随机对照试验[1][1] 桂银莉,史丽璞,郇稳,等.益赛普联合甲氨蝶呤治疗银屑病关节炎34例临床效果观察.北方药学,2017,14(9):143-144.浏览文摘 银屑病病例对照[2][2] 张杰,李江涛,邓文郁,等.......
  • YSP_refs_cn_2017_适应症外及基础研究
    rhTNFR-Fc中文文献-2017-适应症外和基础研究 探索适应症外 案例报道[1-10][1] 杨丽颖,马俊兵.重组人Ⅱ型肿瘤坏死因子受体-抗体融合蛋白治疗红皮病性银屑病的疗效观察.中国医疗美容,2017,7:33-35.浏览文摘[2] 李赛燕.益赛普治疗白塞病的临床分析.现代养生(下半月......
  • YSP_refs_cn_2017_RA
    rhTNFR-Fc中文文献-2017-RA 类风湿关节炎 随机对照试验[1-8][1] 黄达奇.甲氨蝶呤联合益赛普对类风湿关节炎的治疗价值探析.中国保健营养,2017,27:320.浏览文摘[2] 黄源.益赛普联合甲氨蝶呤治疗中重度活动性类风湿关节炎的疗效和安全性评价.医学临床研究,2017,......
  • YSP_refs_cn_2017_SpA
    rhTNFR-Fc中文文献-2017-SpA 脊柱关节炎 随机对照试验[1-10][1] 符维广,李浩鹏.重组人Ⅱ型肿瘤坏死因子受体-抗体融合蛋白治疗强直性脊柱炎的临床效果.中国医药导报,2017,14(6):112-115..浏览文摘[2] 贺冬冬,何岚,张薇,等.关节腔注射益赛普治疗膝关节受累的......
  • VS Code 摸鱼神器,确定不试一下?
    大家好,我是李牌牌。来分享点好玩的"知识"!VSCode插件市场中不仅有很多实用的开发插件,还有很多好玩的摸鱼插件,下面就来分享VSCode中值得一试的摸鱼插件!WeixinRead专门适配微信读书网页版的阅读插件,功能比较简单,可以阅读微信读书的内容,支持登录。安装完成之后,左侧工具栏......
  • 【排序算法】八大排序(下)(c语言实现)(附源码)
    ......
  • 【Oracle19c】静默安装Oracle19c软件与数据库
    1、静默安装Oracle19c软件1.1、适用场景如果无windows环境用于图形安装oracle软件,需要使用静默方式安装数据库,脚本如下:1.2、静默安装Oracle$su-oracle$cd$ORACLE_HOME$./runInstaller-ignorePrereq-waitforcompletion-silent\oracle.install.option=INSTA......
  • AtCoder Beginner Contest 367 A ~ F(无D题)题解
    AtCoderBeginnerContest367A~F(̸\notD)几天前就已经vp过了,但是忘写题解了今天才想起来痛,早知道这么简单,我就不在家里摆烂了A.ShoutEveryday罚了好几发,我打比......