使用反射从MVC中的控制器获取结果/请求对象类型
本文关键字:结果 获取 请求 类型 对象 控制器 反射 MVC | 更新日期: 2023-09-27 18:01:12
我使用以下代码获得了所有通过反射从dll返回ActionResult的方法:
MyAssembly.GetTypes()
.SelectMany(t => t.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
.Where(d => d.ReturnType.Name == "ActionResult" && d.IsPublic);
现在,我想要每个控制器的请求对象和结果对象。
一般来说,在我的项目中,控制器的结构是这样的:
[ServiceControllerResult(typeof(MyControllerResult))]
public ActionResult MyController(MyControllerRequest request)
{
var response = new ServiceResponse<MyControllerResult>();
// do something
return ServiceResult(response);
}
现在,我如何从dll(或存储我引用的ddl的目录(中获取MyControllerResult和MyControllerRequest对象?
感谢
您可以检查方法参数以识别请求类型,并调查方法属性以获得结果类型。假设ServiceControllerResult
属性具有Type
属性:
foreach (var method in methods)
{
var parameters = method.GetParameters();
if (parameters.Length != 1)
{
//decide what to do here
throw new Exception("More than one parameter found");
}
var requestType = parameters[0].ParameterType;
var serviceControllerResultAttribute = method.GetCustomAttribute<ServiceControllerResultAttribute>();
if (serviceControllerResultAttribute == null)
{
//decide what to do here
throw new Exception("ServiceControllerResultAttribute was not found");
}
var resultType = serviceControllerResultAttribute.Type;
}