[MVC] 获取请求时缺少"+"的处理办法 How to fix the bug that missing plus in Request.QueryString/Form...

最近一段时间在做跟某公司数据对接的工作,我们双方的技术人员在观察对接数据的时候,发现部分数据无法通过MD5加密验证。

原始代码如下

1 [HttpPost]
2  public ActionResult Index( string lcData)
3 {
4      string lcDataDecode = HttpUtility.UrlDecode(lcData, Encoding.UTF8);
5      string response = DoSometing(lcDataDecode);
6 
7      return RedirectToAction( " Index ");
8 }

通过双方数据对比,发现上述代码中lcData的值是已经通过Decode之后的值,并不是原始的数据。由于这次Decode,导致数据中的加号“+”被过滤掉。

请参考一下dudu的文章HttpUtility.UrlEncode、HttpUtility.UrlDecode、Server.UrlEncode、Server.UrlDecode的区分与应用

在网上查找了一些解决办法,很多人提到用 Request.QueryString["key"].Replace(" ", "+"); 来处理。但是我们的数据无法这样处理,因为传递的数据中本身就有空格“ ”的存在。

因此,我们寻找到了下面的方法

 1 [HttpPost]
 2  public ActionResult Index( string lcData)
 3 {
 4     Regex r =  new Regex( @" lcData=(?<value>[^&=]+) ");  // 针对我们的需求,如果需要解析所有的可以用(?<name>[^&=]+)=(?<value>[^&=]+)
 5      Match m = r.Match(Request.Params.ToString());
 6 
 7     lcData = m.Groups[ 1].Value;
 8      string lcDataDecode = HttpUtility.UrlDecode(lcData, Encoding.UTF8);
 9 
10      string response = DoSometing(lcDataDecode);
11 
12      return RedirectToAction( " Index ");
13 }

希望能帮助到其他有需要的朋友。

 

转载于:https://www.cnblogs.com/Magicworks/archive/2012/02/03/2336596.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值