嗨,我只是在学习反射,我正在尝试读取用属性 T4ValidateAttribute 装饰的控制器中的操作参数。
举个例子:
public class LoginModelDTO
{
[Required(ErrorMessage = "Username is required")]
[MaxLength(50, ErrorMessage = "Username should not have more then 50 chars")]
[MinLength(25 , ErrorMessage = "Username should have at least 25 chars")]
public string UserName { get; set; }
[Required(ErrorMessage = "Password is required")]
[StringLength(25)]
public string Password { get; set; }
public bool RememberMe { get; set; }
}
[T4ValidateAttribute]
public bool LogIn(LoginModelDTO modelDTO)
{
return m_loginService.Login(modelDTO);
}
我的控制器在一个名为 prokect.WebApi 的项目中,而我的 DTO 在一个名为 project.DomainServices.Contracts 的项目中。我不会添加 ControllerInfo,因为如果你们认为需要它,我会添加它。
//This code get all the controllers that inherit from the BaseApiController
List<Type> controllers = ControllersInfo.GetControllers<BaseApiController>("project.WebApi");
foreach (var controller in controllers)
{
//This retrives a Dictionary that has the key the method name and the valie an array of ParameterInfo[]
var actions = ControllersInfo.GetAllCustomActionsInController(controller, new T4ValidateAttribute());
foreach (var parameterInfose in actions)
{
var parameters = parameterInfose.Value;
foreach (var parameterInfo in parameters)
{
//This is where I do not knwo what to do
}
}
}
如果您稍微查看一下代码并阅读注释,您会发现此时我可以从每个操作中访问它的参数。
在我们的示例中,返回参数将是 LoginModelDTO 类型。
从这里开始,我想对每个属性的这个对象的所有属性进行迭代,以获得它的 CustomAttributes。
我怎样才能做到这一点?