需要在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]); }
}

最新文章

  1. CentOS Yum 命令详解
  2. hdu 3398
  3. C#处理Json文件
  4. 编译libcore-amr静态库
  5. Ubuntu 14.04下java开发环境的搭建--3--Tomcat及MySQL的安装
  6. 根据给定的日期给 dateEdit 控件增加颜色
  7. jquery的一些select操作小记
  8. [转载]C#字符串加密和解密
  9. U3D 通过预置对象实现手动创建精灵
  10. ADFS部署过程中设置network service对证书的读取权限
  11. Execution failed for task &#39;:compileDebugAidl&#39;.
  12. ajax上传文件以及实现上传进度条(转载)
  13. 性能测试工具 Web Service 性能测试工具比较
  14. C# string 转 bool
  15. ConcurrentHashMap 源码阅读小结
  16. nginx 添加https 配置
  17. Swift里的CAP理论和NWR策略应用
  18. 笔记本 F1 键盘
  19. 最优方向法(MOD)
  20. JS将数字转换为大写汉字人民币

热门文章

  1. WPF DataGrid 的RowDetailsTemplate的使用
  2. asp.net文件流下载的代码摘要
  3. 简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录
  4. GIS基础软件及操作(七)
  5. 海康SDK编程指南
  6. SetForegroundWindow API函数还不够(好多好多解决方案,真是奇思妙想)
  7. Java实现Qt的SIGNAL-SLOT机制(保存到Map中,从而将它们关联起来,收到信号进行解析,最后反射调用)
  8. 管道Demo
  9. Google+团队如何测试移动应用 - from Google Testing Blog
  10. C语言实现常用数据结构——图