Merhaba,
“İçine ne koydukları belli değil” den kaynaklı değil tabi ki de 🙂 ama yine de bu dokümanın bana gerekli olmasından dolayı küçük bir araştırma ile erişebildiğim tüm parametreleri bir arada toplamaya çalıştım.
Swagger bunu harika yapıyor zaten ama bana uygulama içinde lazımdı. O yüzden aşağıdaki çalışmayı yaptım ve uygulama havuzum içerisinde private hariç, dönüş tipleri actionresult,task veya ienumarable içeren tüm methodları çektim.

[HttpGet]
[Route("GetAllControllerAndMethodNames")]
public IActionResult GetAllControllerAndMethodNames()
{
Assembly assembly = Assembly.GetAssembly(typeof(Startup));
IEnumerable<CustomModel> customModels = assembly.GetTypes()
.SelectMany(t => t.GetMethods(BindingFlags.Instance |
BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.Static))
.Where(d => d.ReturnType.Name.Contains("ActionResult")
|| d.ReturnType.Name.Contains("Task")
|| d.ReturnType.Name.Contains("IEnumerable")
)
.Select(n => new CustomModel()
{
Controller = n.DeclaringType?.Name.Replace("Controller", ""),
Action = n.Name,
Attributes = string.Join(",", n.GetCustomAttributes()
.Select(a => a.GetType().Name.Replace("Attribute", ""))),
Area = (n.DeclaringType.Namespace.Contains("Areas"))
? n.DeclaringType.Namespace.Split('.').Reverse().Skip(1).First() : "",
NameSpace = n.ReturnType.UnderlyingSystemType.AssemblyQualifiedName
.Split(',').Skip(1).First(),
ReturnType = n.ReturnType.Name.Replace("`1", ""),
ReturnParameter = n.ReturnType.UnderlyingSystemType.AssemblyQualifiedName.Replace("[[", "<")
.Replace("`1", "").Split(',').Skip(0).First()
});
return Ok(customModels);
}
Bu methodtaki dönüş tipinde olan modelin yani CustomModel sınıfının içeriği ise şu şekilde, returnparameter da küçük bir işlem yapmam gerekti, gelen datayı parçalayıp aldığım için sonuna da ne kadar < kapsayıcı varsa o kadar > işareti ekleyerek, datanın en azından daha düzgün görünmesini sağladı.

public class CustomModel
{
private string _returnParameter;
public string Controller { get; set; }
public string Action { get; set; }
public string Attributes { get; set; }
public string Area { get; set; }
public string NameSpace { get; set; }
public string ReturnType { get; set; }
public string ReturnParameter {
get { return _returnParameter; }
set {
if (value is not null)
{
int count = value.Split("<").Length - 1;
for (int i = 0; i < count; i++)
{
value = value + ">";
}
}
_returnParameter = value;
} }
}
Sonuç olarak ilgili methodu çağırdığımda kullanımıma hazır güzel bir veri döndürmüş oldu.

…