آپلود فایل در 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 برای آپلود فایل

     


    • نویسنده: احسان بابائی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران