gpt4 book ai didi

asp.net-mvc - 如何测试方法参数是否用属性修饰?

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

这可能是重复的,但我找不到我要找的问题,所以我在问。

您如何测试方法参数是否用属性修饰?例如下面的MVC action方法,使用FluentValidation的CustomizeValidatorAttribute :

[HttpPost]
[OutputCache(VaryByParam = "*", Duration = 1800)]
public virtual ActionResult ValidateSomeField(
[CustomizeValidator(Properties = "SomeField")] MyViewModel model)
{
// code
}

我确定我必须使用反射,希望使用强类型的 lambda。但不确定从哪里开始。

最佳答案

一旦您使用 GetMethodInfo 来处理该方法通过反射调用,你可以简单地调用 GetParameters()在该方法上,然后对于每个参数,您可以检查 GetCustomAttributes()调用 X 类型的实例。例如:

Expression<Func<MyController, ActionResult>> methodExpression = 
m => m.ValidateSomeField(null);
MethodCallExpression methodCall = (MethodCallExpression)methodExpression.Body;
MethodInfo methodInfo = methodCall.Method;

var doesTheMethodContainAttribute = methodInfo.GetParameters()
.Any(p => p.GetCustomAttributes(false)
.Any(a => a is CustomizeValidatorAttribute)));

Assert.IsTrue(doesTheMethodContainAttribute);

例如,此测试会告诉您是否有任何参数包含该属性。如果需要特定参数,则需要更改 GetParameters调用更具体的东西。

关于asp.net-mvc - 如何测试方法参数是否用属性修饰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197677/

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