3.4 KiB
title | localeTitle |
---|---|
Arranging Operations Alphabetically in Swashbuckle Swagger | ترتيب العمليات حسب الترتيب الأبجدي في Swashbuckle اختيال |
Swashbuckle يضيف بسلاسة اختيال إلى مشاريع WebAPI. ومع ذلك ، لا تظهر العمليات على الصفحة بالترتيب الأبجدي.
على الرغم من أن العمليات لن تظهر بالترتيب الأبجدي ، إلا أن Swashbuckle تسمح بمرشحات مخصصة وبتكويد صغير ، يمكن إظهار الترتيب بترتيب أبجدي.
مثال الكود
ينشئ التعليمة البرمجية أدناه DocumentFilter ثم يتم تطبيقه على المستند النهائي كما هو موضح هنا .
`using Swashbuckle.Swagger; using System; using System.Collections.Generic; using System.Linq; using System.Web;
namespace YourNamespace.Swagger.Extensions { public class CustomDocumentFilter : IDocumentFilter { public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, System.Web.Http.Description.IApiExplorer apiExplorer) { //make operations alphabetic var paths = swaggerDoc.paths.OrderBy(e => e.Key).ToList(); swaggerDoc.paths = paths.ToDictionary(e => e.Key, e => e.Value);
//controller comments do not get added to swagger docs. This is how to add them.
AddControllerDescriptions(swaggerDoc, apiExplorer);
}
private static void AddControllerDescriptions(SwaggerDocument swaggerDoc, System.Web.Http.Description.IApiExplorer apiExplorer)
{
var doc = new YourPortal.Areas.HelpPage.XmlDocumentationProvider(GetXmlCommentsPath());
List<Tag> lst = new List<Tag>();
var desc = apiExplorer.ApiDescriptions;
ILookup<HttpControllerDescriptor, ApiDescription> apiGroups = desc.ToLookup(api => api.ActionDescriptor.ControllerDescriptor);
foreach (var apiGroup in apiGroups)
{
string tagName = apiGroup.Key.ControllerName;
var tag = new Tag { name = tagName };
var apiDoc = doc.GetDocumentation(apiGroup.Key);
if (!String.IsNullOrWhiteSpace(apiDoc))
tag.description = apiDoc;
lst.Add(tag);
}
if (lst.Count() > 0)
swaggerDoc.tags = lst.ToList();
}
private static string GetXmlCommentsPath()
{
return System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/YourPortal.xml");
}
}
} `
الآن يمكنك ببساطة إضافته إلى ملف التكوين مثل هذا
.EnableSwagger(c => { ... c.DocumentFilter<YourNamespace.Swagger.Extensions.CustomDocumentFilter>(); ... } );