识别WebAPI应用程序中的所有操作方法

发布于 2025-01-14 21:50:23 字数 236 浏览 2 评论 0原文

是否可以列出 WebApi 应用程序的所有操作方法以及返回类型和参数。

我看到了一个类似的问题并且也回答了,但是是针对MVC的(在 C# 中获取所有控制器和操作名称)。但我尝试对 webapi 进行一些更改,但无法做到。

Is it possible to list all the action methods along with return types and parameters, of a WebApi application.

I saw a similar question and asnwered as well, but were for MVC (Getting All Controllers and Actions names in C#). But I tried to do some changes to in webapi, but couldnt do it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薄荷→糖丶微凉 2025-01-21 21:50:23

下面的代码将为您提供所有必需的信息。

var controlleractionlist = asm.GetTypes()
                .Where(type => typeof(ApiController).IsAssignableFrom(type))
                .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
                .Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
                .Select(x => new { Controller = x.DeclaringType.Name, Action = x.Name, 
                            ReturnType = x.ReturnType.Name, 
                    Attributes = String.Join(",", x.GetCustomAttributes().Select(a => a.GetType().Name.Replace("Attribute", ""))), 
                    ControllerRouteAttr = ((System.Web.Http.RoutePrefixAttribute)Attribute.GetCustomAttribute(x.DeclaringType, typeof(System.Web.Http.RoutePrefixAttribute)))?.Prefix,
                    MethodRouteAttr = ((System.Web.Http.RouteAttribute)Attribute.GetCustomAttribute(x, typeof(System.Web.Http.RouteAttribute)))?.Template,
                    params1 = String.Join(",", x.GetParameters().Select(a => a.Name)),
                    returnType = String.Join(",", x.GetParameters().Select(a => a.Name.GetType()))
                })
                .OrderBy(x => x.Controller).ThenBy(x => x.Action).ToList();

Below code will get you all required information.

var controlleractionlist = asm.GetTypes()
                .Where(type => typeof(ApiController).IsAssignableFrom(type))
                .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
                .Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
                .Select(x => new { Controller = x.DeclaringType.Name, Action = x.Name, 
                            ReturnType = x.ReturnType.Name, 
                    Attributes = String.Join(",", x.GetCustomAttributes().Select(a => a.GetType().Name.Replace("Attribute", ""))), 
                    ControllerRouteAttr = ((System.Web.Http.RoutePrefixAttribute)Attribute.GetCustomAttribute(x.DeclaringType, typeof(System.Web.Http.RoutePrefixAttribute)))?.Prefix,
                    MethodRouteAttr = ((System.Web.Http.RouteAttribute)Attribute.GetCustomAttribute(x, typeof(System.Web.Http.RouteAttribute)))?.Template,
                    params1 = String.Join(",", x.GetParameters().Select(a => a.Name)),
                    returnType = String.Join(",", x.GetParameters().Select(a => a.Name.GetType()))
                })
                .OrderBy(x => x.Controller).ThenBy(x => x.Action).ToList();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文