📅  最后修改于: 2023-12-03 14:59:24.716000             🧑  作者: Mango
在 ASP.NET Core WebAPI 中,ActionDescriptor 是一个表示控制器方法的类。它可以用于检查控制器方法特性信息以及其他有用的信息。然而,如果你尝试使用 GetCustomAttributes 方法来检索控制器方法的特性,你会遇到问题:它不被 ActionDescriptor 支持!
GetCustomAttributes 是 .NET 框架中 Type 类的一个成员函数。使用该函数,你可以检索一个 .NET 对象中的特性列表。举例来说,在 ASP.NET WebAPI 中,你可以使用 GetCustomAttributes 函数来检索控制器方法的特性列表。但在 ASP.NET Core WebAPI 中,你会发现 ActionDescriptor 没有实现 GetCustomAttributes 函数。
为了获取控制器方法的特性,你可以使用 GetControllerAction方法,该方法将返回控制器方法的 ActionDescriptor。一旦你有了该描述符对象,你将能够检索控制器方法的各种信息,如特性。
以下是一个使用 GetControllerAction 方法检索控制器方法特性的例子:
[HttpGet]
[Route("sample")]
[AllowAnonymous]
public async Task<IActionResult> GetSample()
{
var actionDescriptor = ControllerContext.ActionDescriptor as ControllerActionDescriptor;
if (actionDescriptor != null)
{
var allowAnonymous = actionDescriptor.MethodInfo.GetCustomAttributes(inherit: true).Any(a => a.GetType() == typeof(AllowAnonymousAttribute));
if (allowAnonymous)
{
// do something
}
}
// do something
}
在上面的示例中,我们使用 GetControllerAction 方法获得控制器方法的 ActionDescriptor,在这个描述符中检索 MethodInfo 的特性并查看 AllowAnonymousAttribute 是否存在。如果它存在,就执行特定的动作。
虽然 ActionDescriptor 不直接支持 GetCustomAttributes 方法,但你可以使用 GetControllerAction 方法来获取控制器方法的描述符,然后使用 MethodInfo 对象的 GetCustomAttributes 方法来检查其特性信息。这可让你轻松获取控制器方法的关键信息,在开发过程中更加高效。