.net Mvc过滤器处理请求参数(去除字符串的多余空格)适用于解密等操作

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Mvc;
//using System.Web.Http.Filters;

namespace Filters
{
    public class TestFilter : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            /*var par = filterContext.ActionParameters;
             var newRequest =new  Dictionary<string, object>();
             foreach (var key in filterContext.ActionParameters.Keys)
             {
                 var thisValue = par[key];
                 JObject json = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeObject(thisValue));
                 var newJson = CopyJObject(json);
                 newRequest.Add(key, newJson);
             filterContext.ActionParameters = newRequest;
             }*/

            var parameters = filterContext.ActionDescriptor.GetParameters();
            foreach (var parameter in parameters)
            {
                var para = filterContext.ActionParameters[parameter.ParameterName];
                if (para==null)
                {

                }
                else if (para.GetType() == typeof(string))
                {
                    filterContext.ActionParameters[parameter.ParameterName] = para.ToString().Trim();
                }
                else
                {
                    try
                    {
                        JObject json = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeObject(para));
                        var newJson = CopyJObject(json);
                        var tt = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(newJson), para.GetType());
                        filterContext.ActionParameters[parameter.ParameterName] = tt;

                    }
                    catch (Exception)
                    {//不可序列化的不做修改
                    }
                }
            }
            base.OnActionExecuting(filterContext);
        }
        public static JObject CopyJObject(JObject orgJObject)
        {
            var desJObject = new JObject();
            foreach (var pro in orgJObject)
            {
                if (pro.Value == null)
                    continue;
                if (pro.Value is JObject)
                {
                    JObject des = CopyJObject((JObject)pro.Value);
                    desJObject[pro.Key.Trim()] = des;
                }
                if (pro.Value is JValue)
                {
                    if (string.IsNullOrEmpty((string)pro.Value)) continue;
                    desJObject.Add(pro.Key, pro.Value.ToString().Trim());
                }
                if (pro.Value is JArray)
                {
                    JArray array = new JArray();
                    foreach (var item in (JArray)pro.Value)
                    {
                        if (item is JObject)
                        {
                            JObject des = CopyJObject((JObject)item);
                            array.Add(des);
                        }
                        if (item is JValue)
                        {
                            array.Add(item.ToString().Trim());
                        }

                    }
                    if (array.Count != 0)
                        desJObject.Add(pro.Key.Trim(), array);
                }
            }
            return desJObject;
        }
    }
}

 

全局调用:

App_Start下的FilterConfig.cs 添加 filters.Add(new TestFilter());

Global.asax下添加FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

个别控制器调用,不全局注册然后使用:[TestFilter]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值