gpt4 book ai didi

asp.net-core - ASP .NET Core 2 中的字符串修剪模型绑定(bind)器

转载 作者:行者123 更新时间:2023-12-04 00:04:26 25 4
gpt4 key购买 nike

我正在开发一个 .NET Core 2 API 项目,并且一直在尝试实现一个通用字符串修剪模型绑定(bind)器,该绑定(bind)器将修剪提供的请求参数和字段值的所有字符串值。到目前为止,我的结果好坏参半,并且正在努力寻找可以为我指明正确方向的工作示例。我一直在尝试实现与 posted by Vikash Kumar 相同的模型绑定(bind)器。 .

此模型绑定(bind)器适用于通过直接参数传递到 Controller 操作的所有字符串值,例如 public IActionResult Profile(string username) ,但对于复杂对象中的字符串字段,BindModelAsync TrimmingModelBinder 的方法类永远不会被调用。我的 Controller 中的 HttpPost 操作示例是 public IActionResult Profile([FormBody] ProfileLookupModel model) .模型绑定(bind)器似乎没有检查复杂模型的字段。它也不适用于字符串列表的字段。

我记得在 .NET Core 之前,指定字符串修剪模型绑定(bind)器将递归检查复杂模型的每个字段,甚至是复杂模型中的模型。在 .NET Core 中似乎并非如此,但我可能错了。我的项目针对 netcoreapp2.0框架。

我很好奇是否有人遇到与我相同的问题并可能找到解决方案。

注意:我没有发布任何示例代码,因为它与引用文章中的代码相同。

最佳答案

我会在这里加我的 2 美分。我没有使用某种模型绑定(bind)钩子(Hook),而是使用了一个 Action 过滤器。优点之一是开发人员可以选择要使用的操作,而不是对所有请求和模型绑定(bind)进行此处理(并不是说它应该对性能产生太大影响)。顺便说一句, Action 过滤器也可以全局应用。

这是我的代码,首先创建一个 Action 过滤器。

public class TrimInputStringsAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
foreach (var arg in context.ActionArguments.ToList())
{
if (arg.Value is string)
{
if (arg.Value == null)
{
continue;
}

string val = arg.Value as string;
if (!string.IsNullOrEmpty(val))
{
context.ActionArguments[arg.Key] = val.Trim();
}

continue;
}

Type argType = arg.Value.GetType();
if (!argType.IsClass)
{
continue;
}

TrimAllStringsInObject(arg.Value, argType);
}
}

private void TrimAllStringsInObject(object arg, Type argType)
{
var stringProperties = argType.GetProperties()
.Where(p => p.PropertyType == typeof(string));

foreach (var stringProperty in stringProperties)
{
string currentValue = stringProperty.GetValue(arg, null) as string;
if (!string.IsNullOrEmpty(currentValue))
{
stringProperty.SetValue(arg, currentValue.Trim(), null);
}
}
}
}

要使用它,要么注册为全局过滤器,要么使用 TrimInputStrings 属性装饰您的操作。
[TrimInputStrings]
public IActionResult Register(RegisterViewModel registerModel)
{
// Some business logic...
return Ok();
}

关于asp.net-core - ASP .NET Core 2 中的字符串修剪模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51433268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com