gpt4 book ai didi

c# - 在 ASP.NET Core 中获取 Controller 详细信息

转载 作者:行者123 更新时间:2023-11-30 20:34:25 25 4
gpt4 key购买 nike

在 ASP.NET 4.x 中,有一个 ReflectedControllerDescriptor 类驻留在 System.Web.Mvc 中。此类提供 Controller 的描述符。

在我以前的应用程序中,我曾经这样做过:

var controllerDescriptor = new ReflectedControllerDescriptor(controllerType);

var actions = (from a in controllerDescriptor.GetCanonicalActions()
let authorize = (AuthorizeAttribute)a.GetCustomAttributes(typeof(AuthorizeAttribute), false).SingleOrDefault()
select new ControllerNavigationItem
{
Action = a.ActionName,
Controller = a.ControllerDescriptor.ControllerName,
Text =a.ActionName.SeperateWords(),
Area = GetArea(typeNamespace),
Roles = authorize?.Roles.Split(',')
}).ToList();

return actions;

问题是我在 ASP.NET Core 中找不到此类的任何等效项。我遇到了 IActionDescriptorCollectionProvider,它似乎提供了有限的细节。

问题

我的目标是在 ASP.NET Core 中编写等效代码。我该如何实现?

非常感谢您的帮助

最佳答案

I came across IActionDescriptorCollectionProvider which seems to provide limited details.

可能您没有将 ActionDescriptor 转换为 ControllerActionDescriptor。相关信息为here

My goal is to write an equivalent code in ASP.NET Core. How do I achieve that?

这是我在 ConfigureServices 方法中的尝试:

    var provider = services.BuildServiceProvider().GetRequiredService<IActionDescriptorCollectionProvider>();
var ctrlActions = provider.ActionDescriptors.Items
.Where(x => (x as ControllerActionDescriptor)
.ControllerTypeInfo.AsType() == typeof(Home222Controller))
.ToList();
foreach (var action in ctrlActions)
{
var descriptor = action as ControllerActionDescriptor;
var controllerName = descriptor.ControllerName;
var actionName = descriptor.ActionName;
var areaName = descriptor.ControllerTypeInfo
.GetCustomAttribute<AreaAttribute>().RouteValue;
}

关于c# - 在 ASP.NET Core 中获取 Controller 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276763/

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