gpt4 book ai didi

c# - ASP.NET MVC ActionFilterAttribute 在模型绑定(bind)之前注入(inject)值

转载 作者:太空狗 更新时间:2023-10-29 21:30:45 25 4
gpt4 key购买 nike

我想创建一个自定义操作过滤器属性,在模型绑定(bind)期间可访问的 HttpContext 项中添加一个值。

我已尝试将其添加到 OnActionExecuting 中,但模型绑定(bind)似乎是在过滤器之前执行的。

你知道我该怎么做吗?也许模型绑定(bind)器中有一个我可以覆盖的方法,它将在过滤器之后触发并使用我的过滤器注入(inject)的值。

我想做的,就是注入(inject)一个validation context(我用来验证的库支持context,它是nvalid.net(www.nvalid.net)

我希望能够放置一个属性,例如

[ValidationContext("Prevalidation")]

在我的 actionresult 方法上,以便在我的自定义模型 Binder 中发生的验证可以知道在执行验证时要使用哪个上下文。

这就是为什么我不能简单地制作自定义模型 Binder 的原因。

最佳答案

我找到了实现它的方法。

public class ModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var actionName = controllerContext.RouteData.Values["action"] != null
? controllerContext.RouteData.Values["action"].ToString()
: string.Empty;

var attribute = controllerContext.Controller.GetType().GetMethods()
.Where(x => x.Name == actionName)
.Where(x => x.GetCustomAttributes(false).Any(a => a.GetType() == typeof(CustomActionFilterAttribute)))
.Select(x => x.GetCustomAttributes(typeof(CustomActionFilterAttribute), false).FirstOrDefault())
.FirstOrDefault() as CustomActionFilterAttribute;

if(attribute != null && attribute.AnyProperty)
{
// Do what you want
}
}
}

通过反射我可以找到属性并在我的模型绑定(bind)器中使用它

关于c# - ASP.NET MVC ActionFilterAttribute 在模型绑定(bind)之前注入(inject)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4266966/

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