问题描述
如何在 ASP.NET Core 中找到控制器名称?
我在谷歌上搜索了它,首先我得到了解决方案 ControllerContext.ActionDescriptor.ControllerName
。
但在我的 ASP.NET Core 应用程序中,ControllerContext
没有显示任何属性。
请帮帮我。
解决方法
如果您使用的是 ASP.NET Core 3+,则可以利用端点路由并在控制器操作中获取当前端点。
控制器操作具有 ControllerActionDescriptor
元数据,可为您提供有关操作的信息。
[ApiController]
[Route("")]
public class HelloController : ControllerBase
{
[HttpGet]
public async Task<IActionResult> Index(CancellationToken cancellationToken)
{
var endpoint = HttpContext.GetEndpoint();
var actionDescriptor = endpoint!.Metadata.OfType<ControllerActionDescriptor>().First()!;
var controllerName = actionDescriptor.ControllerName;
// -> gives you "Hello"
return Ok(controllerName);
}
}
如果您正在寻找完全限定的名称,您可以使用控制器类型信息
var controllerFullName = actionDescriptor.ControllerTypeInfo.FullName;
// -> gives you "ApiPlayground.HelloController"