مقالات باگتو

آپلود فایل در Swagger
آپلود فایل در Swagger

Swagger سریع ترین و راحت ترین روش برای مستند سازی API REST است. Swagger مستندات را بر اساس ساختار کد تولید می کند و از این رو توسعه دهندگان بجای صرف زمان برای نوشتن مستندات تمام زمان و انرژی خود را بر روی توسعه محصول متمرکز می کنند.

همان طور که در مقاله آموزش Swagger در Asp.Net Core مشاهده کردید، این ابزار به راحتی و با چند خط کد به پروژه ی ما اضافه می شود و مستندات را برای ما تولید می کند. اما مواردی وجود دارد که نیاز داریم خودمان کانفیگ های swagger را تغییر دهیم و پشتیبانی از این موارد را به swagger اضافه کنیم. این موارد معمولا در همه پروژه ها استفاده ای ندارند و برای همینSwagger به صورت پیش فرض این موارد را به کانفیگ اضافه نمی کند و ما مجبوریم خودمان دست بکار شویم. یکی از این موارد آپلود فایل می باشد. ما در این مقاله به آموزش آپلود فایل در Swagger Ui می پردازیم.

یک پروژه Asp.Net Core ایجاد نمایید و طبق آموزش نحوه استفاده از Swagger ابزار Swagger را به آن اضافه کنید. سپس یک کنترلر به نام File ایجاد کنید.

    [Route("api/[controller]")]
    [ApiController]
    public class FileController : ControllerBase
    {

        [HttpPost]
        public ActionResult Post(IFormFile file)
        {
            return Ok();
        }
    }

یک اکشن هم برای آپلود فایل به کنترلر File اضافه کنید.این اکشن از ورودی یه فایل از نوع IFormFile دریافت میکند.

 حالا اگر پروژه را اجرا بگیریم و به داکیومنت swagger مراجعه کنیم با تصویر زیر روبه رو می شویم. به سختی می توانیم یک فایل را درswagger با همین امکانات که مشاهده می کنید آپلود کنیم.

   upload file in swagger

حالا وقت آن رسیده که خودمان دست به کد شویم و قابلیت آپلود فایل را به Swagger اضافه کنیم. برای این منظور کلاس زیر را به پروژه اضافه نمایید.

 

public class SwaggerFileOperationFilter : IOperationFilter
    {
        public void Apply(Operation operation, OperationFilterContext context)
        {
            var fileParams = context.MethodInfo.GetParameters()
                .Where(p => p.ParameterType.FullName.Equals(typeof(Microsoft.AspNetCore.Http.IFormFile).FullName));

            if (fileParams.Any() && fileParams.Count() == 1)
            {
                operation.Parameters = new List<IParameter>
                {
                    new NonBodyParameter
                    {
                        Name = fileParams.First().Name,
                        Required = true,
                        Type = "file",
                        In = "formData"
                    }
                };
            }
        }
    }

این کلاس از IOperationFilter که از اینترفیس های خود Swagger  ارث بری میکند.

بعد از ساخت این کلاس باید آن را در  startup.cs به swagger معرفی کنیم. کانفیگ swagger را به صورت زیر تغییر دهید.


            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
                c.OperationFilter<SwaggerFileOperationFilter>();
            });

 

 

 صفحه ی نرم افزار swagger برای آپلود فایل

 

تگ‌ها
اشتراک

0 نظرات