对http请求进行过滤处理,转换成接收着需要的格式
2024-09-01 02:44:18
需要在Global.asax的Application中进行初始化处理 这样:GlobalConfiguration.Configuration.MessageHandlers.Add(new DefaultHandler())
然后在App_Start文件夹中添加 DefaultHandler 类复制下面的代码
public class DefaultHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.RequestUri = new Uri(request.RequestUri.ToString()); MediaTypeHeaderValue contentType = request.Content.Headers.ContentType; if (contentType != null)
{
switch (contentType.MediaType)
{
case "application/x-www-form-urlencoded":
{
NameValueCollection formData = await request.Content.ReadAsFormDataAsync(cancellationToken);
request.Content = new FormUrlEncodedContent(Correct(formData)); //如下代码为了预下订单使用
var formDataDic = formData.ToDictionary();
var str = ConvertToJsonString(formDataDic);
HttpContext.Current.Request.Headers.Add("formDataToJson", str);
}
break;
case "multipart/form-data":
{
NameValueCollection formData = await request.Content.ReadAsFormDataAsync(cancellationToken);
request.Content = new FormUrlEncodedContent(Correct(formData));
}
break;
case "application/json":
{
HttpContentHeaders oldHeaders = request.Content.Headers;
string formData = await request.Content.ReadAsStringAsync();
request.Content = new StringContent(formData);
ReplaceHeaders(request.Content.Headers, oldHeaders);
}
break;
default:
throw new Exception("Implement It!");
}
} return await base.SendAsync(request, cancellationToken);
} private static IEnumerable<KeyValuePair<string, string>> Correct(NameValueCollection formData)
{
return formData.Keys.Cast<string>().Select(key => new KeyValuePair<string, string>(key, formData[key])).ToList();
} private static void ReplaceHeaders(HttpHeaders currentHeaders, HttpHeaders oldHeaders)
{
currentHeaders.Clear();
foreach (var item in oldHeaders)
currentHeaders.Add(item.Key, item.Value);
} private string ConvertToJsonString(IDictionary<string, string> param)
{
dynamic myObj = new ExpandoObject();
var dic = (IDictionary<string, object>)myObj;
foreach (var item in param)
{
if (item.Value.StartsWith("[") || item.Value.StartsWith("{"))
{
dic[item.Key] = JsonConvert.DeserializeObject(item.Value);
}
else
{
dic[item.Key] = item.Value;
}
}
return JsonConvert.SerializeObject(myObj);
}
}
public static class NVCExtender
{
public static IDictionary<string, string> ToDictionary(this NameValueCollection source)
{ return source.AllKeys.ToDictionary(k => k, k => source[k]); }
}
最新文章
- CentOS Yum 命令详解
- hdu 3398
- C#处理Json文件
- 编译libcore-amr静态库
- Ubuntu 14.04下java开发环境的搭建--3--Tomcat及MySQL的安装
- 根据给定的日期给 dateEdit 控件增加颜色
- jquery的一些select操作小记
- [转载]C#字符串加密和解密
- U3D 通过预置对象实现手动创建精灵
- ADFS部署过程中设置network service对证书的读取权限
- Execution failed for task &#39;:compileDebugAidl&#39;.
- ajax上传文件以及实现上传进度条(转载)
- 性能测试工具 Web Service 性能测试工具比较
- C# string 转 bool
- ConcurrentHashMap 源码阅读小结
- nginx 添加https 配置
- Swift里的CAP理论和NWR策略应用
- 笔记本 F1 键盘
- 最优方向法(MOD)
- JS将数字转换为大写汉字人民币
热门文章
- WPF DataGrid 的RowDetailsTemplate的使用
- asp.net文件流下载的代码摘要
- 简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录
- GIS基础软件及操作(七)
- 海康SDK编程指南
- SetForegroundWindow API函数还不够(好多好多解决方案,真是奇思妙想)
- Java实现Qt的SIGNAL-SLOT机制(保存到Map中,从而将它们关联起来,收到信号进行解析,最后反射调用)
- 管道Demo
- Google+团队如何测试移动应用 - from Google Testing Blog
- C语言实现常用数据结构——图