如何在Web API过滤器中清理字符串参数的值?

简单代码

我有Web api应用程序,我想使用Web api过滤器清理来自前端应用程序的数据。

我创建了以下过滤器:

public class StringFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        foreach (var actionArgument in actionContext.ActionArguments)
        {
            if (actionArgument.Value.GetType() == typeof(string))
            {
                var sanitizedString = actionArgument.Value.ToString().Trim();
                sanitizedString = Regex.Replace(sanitizedString, @"\s+", " ");
                actionContext.ActionArguments[actionArgument.Key] = sanitizedString;
            }
            else
            {
                var properties = actionArgument.Value.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
                    .Where(x => x.CanRead && x.PropertyType == typeof(string) && x.GetGetMethod(true).IsPublic && x.GetSetMethod(true).IsPublic);
                foreach (var propertyInfo in properties)
                {
                    var sanitizedString = propertyInfo.GetValue(actionArgument.Value).ToString().Trim();
                    sanitizedString = Regex.Replace(sanitizedString, @"\s+", " ");
                    propertyInfo.SetValue(actionArgument.Value, sanitizedString);
                }
            }
        }

    }
}

这段代码的问题是if语句中的代码,我想对作为单个字符串传递的参数进行清理,但出现此错误:

“ ClassName”:“ System.InvalidOperationException”,“ Message”:“集合已被修改;枚举操作可能不会执行。

但是,如果我的Web api动作将参数作为具有字符串属性的dto对象,则该代码(在else语句内部)可以正常工作,并且在开始执行该动作之前先对字符串进行清理。

所以我的问题是如果是字符串参数,如何清理传递的参数?

恩科西

您试图在枚举时修改同一集合,这是不允许的。进行调用,.ToList()以便在修改原始集合时枚举单独的集合。foreach (var actionArgument in actionContext.ActionArguments.ToList()) {...

public override void OnActionExecuting(HttpActionContext actionContext) {
    foreach (var actionArgument in actionContext.ActionArguments.ToList()) {
        if (actionArgument.Value != null && actionArgument.Value is string) {
            var sanitizedString = actionArgument.Value.ToString().Trim();
            sanitizedString = Regex.Replace(sanitizedString, @"\s+", " ");
            actionContext.ActionArguments[actionArgument.Key] = sanitizedString;
        } else {
            var properties = actionArgument.Value.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
                .Where(x => x.CanRead && x.PropertyType == typeof(string) && x.GetGetMethod(true).IsPublic && x.GetSetMethod(true).IsPublic);
            foreach (var propertyInfo in properties) {
                var sanitizedString = propertyInfo.GetValue(actionArgument.Value).ToString().Trim();
                sanitizedString = Regex.Replace(sanitizedString, @"\s+", " ");
                propertyInfo.SetValue(actionArgument.Value, sanitizedString);
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Javascript

如何在字符串过滤器中修改输入的值

来自分类Dev

如何在Web API操作过滤器中读取参数属性值

来自分类Dev

Django,如何使用过滤器检查参数中是否包含字符串字段

来自分类Dev

如何在一个过滤器中过滤数组的多个选项/字符串?

来自分类Dev

如何使用django中既包含字符串值又包含列表值的字典中的过滤器?

来自分类Dev

如何在python中应用多列过滤器(字符串)

来自分类Dev

如何在C#中解析Odata过滤器字符串?

来自分类Dev

如何在Python中制作高效的字符串过滤器?

来自分类Dev

如何在字符串中定义过滤器或表达式?

来自分类Dev

如何在 C# 中对 MongoDB UpdateOne 实现字符串小于过滤器

来自分类Dev

将 mongodb 过滤器字符串抛出 http 到 web api

来自分类Dev

如何编写 JSON Path 以根据字符串过滤器获取特定值?

来自分类Dev

如何创建字符串过滤器脚本?

来自分类Dev

如何比较过滤器运算符中的数字字符串?

来自分类Dev

如何从列为字符串而不是DocumentFields的字段中创建mongoengine过滤器查询

来自分类Dev

如何将字符串文字传递给JavaScript中的过滤器函数

来自分类Dev

在VBA中,如何将过滤器转换为sql字符串where子句

来自分类Dev

如何在我的grep脚本中添加一个不包含字符串的过滤器?

来自分类Dev

如何在 .Net Core MVC 中实现 IAuthorization 过滤器时获取连接字符串?

来自分类Dev

如何在 SQL Server 中包含字符串时应用百分比过滤器

来自分类Dev

如何在电子邮件过滤器中使用此字符串?

来自分类Dev

如何在linq中将字符串与“过滤器”列表进行比较?

来自分类Dev

如何在laravel中使用查询字符串制作过滤器

来自分类Dev

如何在函数中将字符串传递给dplyr过滤器?

来自分类Dev

如何编写angularjs过滤器以搜索字符串片段/字符串序列

来自分类Dev

Scala-如何将字符串值传递到数据帧过滤器(Spark-Shell)

来自分类Dev

在合并前面的过滤器时,如何获取其title属性值与提供的字符串匹配的元素

来自分类Dev

如何在 ASP.NET Core Web API 中实现搜索过滤器

来自分类Dev

如何在 CustomAuthorizeAttribute Web API 中添加过滤器

Related 相关文章

  1. 1

    如何在字符串过滤器中修改输入的值

  2. 2

    如何在Web API操作过滤器中读取参数属性值

  3. 3

    Django,如何使用过滤器检查参数中是否包含字符串字段

  4. 4

    如何在一个过滤器中过滤数组的多个选项/字符串?

  5. 5

    如何使用django中既包含字符串值又包含列表值的字典中的过滤器?

  6. 6

    如何在python中应用多列过滤器(字符串)

  7. 7

    如何在C#中解析Odata过滤器字符串?

  8. 8

    如何在Python中制作高效的字符串过滤器?

  9. 9

    如何在字符串中定义过滤器或表达式?

  10. 10

    如何在 C# 中对 MongoDB UpdateOne 实现字符串小于过滤器

  11. 11

    将 mongodb 过滤器字符串抛出 http 到 web api

  12. 12

    如何编写 JSON Path 以根据字符串过滤器获取特定值?

  13. 13

    如何创建字符串过滤器脚本?

  14. 14

    如何比较过滤器运算符中的数字字符串?

  15. 15

    如何从列为字符串而不是DocumentFields的字段中创建mongoengine过滤器查询

  16. 16

    如何将字符串文字传递给JavaScript中的过滤器函数

  17. 17

    在VBA中,如何将过滤器转换为sql字符串where子句

  18. 18

    如何在我的grep脚本中添加一个不包含字符串的过滤器?

  19. 19

    如何在 .Net Core MVC 中实现 IAuthorization 过滤器时获取连接字符串?

  20. 20

    如何在 SQL Server 中包含字符串时应用百分比过滤器

  21. 21

    如何在电子邮件过滤器中使用此字符串?

  22. 22

    如何在linq中将字符串与“过滤器”列表进行比较?

  23. 23

    如何在laravel中使用查询字符串制作过滤器

  24. 24

    如何在函数中将字符串传递给dplyr过滤器?

  25. 25

    如何编写angularjs过滤器以搜索字符串片段/字符串序列

  26. 26

    Scala-如何将字符串值传递到数据帧过滤器(Spark-Shell)

  27. 27

    在合并前面的过滤器时,如何获取其title属性值与提供的字符串匹配的元素

  28. 28

    如何在 ASP.NET Core Web API 中实现搜索过滤器

  29. 29

    如何在 CustomAuthorizeAttribute Web API 中添加过滤器

热门标签

归档