我想输出一个HTTP方法列表,用户可以对特定的路由名称使用这些方法。
例如
[HttpGet("somethingcool",Name="name"]
public IActionResult Get(){ Ok(); }
[HttpPost("somethingcool",Name="name"]
public IActionResult Post(){ Ok(); }
当我试图获得路由name
可以接受的HTTP方法时,我希望看到get、POST
有什么想法吗?
MS提供了一个NuGet包来反映您的代码并找到您的api支持的方法。请在此处查看更多信息:MSDN |为ASP创建帮助页。NET Web API
然后在你的控制器中,你可以从获得信息
Configuration.Services.GetApiExplorer().ApiDescriptions
我认为您希望向客户端公开方法列表。为此,您应该使用OPTIONS动词,它正是为此目的而制作的:MDN|OPTIONS
在概念上,您要求做的事情是不可能的。这是因为单个路由可以引用任意数量的操作方法。命名管线也是可选的。路由主要设计为匹配当前请求,因此获取与任何可能请求匹配的所有路由的列表并不是路由中内置的内容。
但是,如果仅使用属性路由,则可以使用Reflection扫描控制器类中的HttpGet
和HttpPost
属性,然后使用Name属性筛选属性列表。
var classes = assembly.GetTypes().Where(t => t.GetTypeInfo().IsClass && t.Name.EndsWith("Controller"));
foreach (var c in classes)
{
var methods = c.GetMethods(BindingFlags.Public | BindingFlags.Instance);
foreach (var method in methods)
{
var getAtt = method.GetCustomAttribute(typeof(HttpGetAttribute));
var postAtt = method.GetCustomAttribute(typeof(HttpPostAttribute));
// Check whether they are null and add metadata to your result list
}
}
如果您使用基于约定的路由,则需要用自定义属性标记引用基于约定路由的方法,以指示其对应的路由。
[RouteName("default")]
然后像扫描HttpGet
和HttpPost
一样扫描该属性。但你必须努力确保每条路线都有一个名字,每个方法都有一种可能的搜索属性,这样它才能工作。