Evde Uygulama Dokümantasyonu Yapımı

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.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s