gpt4 book ai didi

c# - 从 MVC 中的 Controller 方法获取属性标记?

转载 作者:行者123 更新时间:2023-11-30 14:23:06 24 4
gpt4 key购买 nike

我正在尝试从 API Controller 获取 Attribute 标记,以便我可以查看它在运行时允许的 HTTP 动词。从下面的示例代码中,我希望能够获取 [HttpGet] 标记。

[HttpGet]
public void MyResource()
{
// Controller logic
}

我目前正在使用 System.Reflection 在 API 运行时收集有关我的 API 的其他信息,但到目前为止我无法检索到 [HttpGet 标记和其他 Http 动词标签。我已经尝试了以下每种解决方案,但没有成功:

public void GetControllerMethodHttpAttribute()
{
MethodInfo controllerMethod = typeof(TestController).GetMethods().First();

// Solution 1
var attrs = controllerMethod.Attributes;

// Solution 2
var httpAttr = Attribute.GetCustomAttributes(typeof(HttpGetAttribute));

// Solution 3
var httpAttr2 = Attribute.GetCustomAttribute(controllerMethod, typeof(HttpGetAttribute));

// Solution 4
var httpAttr3 = Attribute.IsDefined(controllerMethod, typeof(HttpGetAttribute));
}

我之前研究过的关于这个主题的所有问题都只与 Custom Attribute tags 和从中提取值有关,但我找不到任何关于获取框架包含的信息属性标签

有谁知道如何获取 [HttpGet] 属性标签?

谢谢!

最佳答案

提议的解决方案 3 和 4 有效。

您必须注意您正在引用正确的 HttpGetAttributeSystem.Web.Http.HttpGetAttribute 中有一个,System.Web.Mvc.HttpGetAttribute 中有一个。

以下代码列出了 ValuesController API Controller 的公共(public)方法及其是否具有 HttpGet 或 HttpPost 属性的信息。

var methods = typeof(ValuesController).GetMethods();
string infoString = "";

foreach(var method in methods)
{
// Only public methods that are not constructors
if(!method.IsConstructor && method.IsPublic)
{
// Don't include inherited methods
if(method.DeclaringType == typeof(ValuesController))
{

infoString += method.Name;

if(Attribute.IsDefined(method, typeof(System.Web.Http.HttpGetAttribute)))
{
infoString += " GET ";
}
if(Attribute.IsDefined(method, typeof(System.Web.Http.HttpPostAttribute)))
{
infoString += " POST ";
}


infoString += Environment.NewLine;
}
}
}

当 Controller 是 MVC Controller 而不是 API Controller 时,您需要将 System.Web.Http.System.Web.Mvc. 交换。

关于c# - 从 MVC 中的 Controller 方法获取属性标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713510/

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