gpt4 book ai didi

asp.net-mvc - 未经验证的 IValueProvider.GetValue

转载 作者:行者123 更新时间:2023-12-01 22:37:35 26 4
gpt4 key购买 nike

在我的自定义模型 Binder 中我使用

bindingContext.ValueProvider.GetValue(propertyName);

我确实有[ValidateInput(false)] 操作。但是上面的 GetValue 调用会导致

从客户端检测到潜在危险的 Request.QueryString 值

如何让我的自定义模型绑定(bind)器从值提供者处获取未经验证的值?当然,当它发现该操作上有 ValidateInput(false) 时。

最佳答案

以防万一有人好奇,这里有一个快速解决方案。只需在 BindModel/BindProperty 方法中调用 CheckUnvalidated() 即可。这将用未经验证的版本替换默认的 QueryStringValueProvider。

  MethodInfo GetActionMethod(ControllerContext controllerContext)
{
var action = controllerContext.RouteData.Values["action"] as string;
return controllerContext.Controller.GetType().GetMethods().FirstOrDefault(x => x.Name == action ||
x.GetCustomAttribute<ActionNameAttribute>().SafeGet(a => a.Name) == action);
}

void CheckUnvalidated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var method = GetActionMethod(controllerContext);
if (method == null)
return;
if (method.GetCustomAttribute<ValidateInputAttribute>().SafeGet(x => x.EnableValidation, true))
return;
var collection = bindingContext.ValueProvider as ValueProviderCollection;
if (collection == null)
return;
var old = collection.OfType<QueryStringValueProvider>().FirstOrDefault();
if (old != null)
collection.Remove(old);
collection.Add(new UnvalidatedQueryStringValueProvider(controllerContext));
}

class UnvalidatedQueryStringValueProvider : NameValueCollectionValueProvider
{
public UnvalidatedQueryStringValueProvider(ControllerContext controllerContext)
: base(controllerContext.HttpContext.Request.Unvalidated().QueryString, CultureInfo.InvariantCulture)
{
}
}

关于asp.net-mvc - 未经验证的 IValueProvider.GetValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412615/

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