نحوه گرفتن پراپرتی های CategorySepcification در Command
سلام استاد، خسته نباشید، یه سوال داشتم، من یه کلاس CategorySepcification دارم، و توش 3 تا پراپرتی بغیر از آیدی هست، Title، Description، IsImportantFeature
اون IsImportantFeature مثلا مشخص میکنه که این مشخصه، بالا کنار محصول به عنوان ویژگی هاش نشون داده بشه یا نه، حالا من توی کامند، ینی توی خود API مربوط به CreateCategoryCommand من باید چجوری این پراپرتی هارو از یوزر بگیرم، باید یه دیکشنری بسازم که یه کلید داره به عنوان Title، و بعد بجای مقدار هم، یه آبجکت جدا بسازم که توش Description، IsImportantFeature اینارو داره؟ بعد اون آبجکت ینی فقط مخصوص همین کامند هست و فقط توی لایه اپلیکیشن داریم ازش استفاده میکنیم، این کار درسته که یه کلاس جدید تعریف کنیم فقط واسه همین کار؟ اونم توی لایه اپلیکیشن؟ اگر راه بهتر و ساده تری هست نسبت به اینم بگید، ممنون.
پاسخ ها
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
سلام سلامت باشید ، اصلا لازم نیست دیکشنری بسازید ، یه مدل براش بسازید توی لایه application و توی command بگید یه List از اون نوع رو باید پاس بده
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/5048777e-423b-46c3-9968-a0ecc498e69d0955598345365.jpg)
bzmind
راست گفتید، من ذهنم قفل شده بود رو همین دیکشنری، بعد استاد یه مشکل دیگم هست، الان من اگر توی اکشنِ کنترلر، پشت پارامتر اگر بنویسم [From Form]، بعد تمام اطلاعات درست ارسال میشه بجز اونایی که به صورت json ارسال میشن، چجوری میشه از طریق فُرم، هم جیسون ارسال کرد هم بقیه اطلاعات رو؟
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
اگر بخواین Json دریافت کنید توی FormData باید یه پراپرتی از نوع String داشته باشید و توی فرانت بگید که اون مقدار مدنظر رو به Json تبدیل کنن و برای شما ارسال کنن
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/5048777e-423b-46c3-9968-a0ecc498e69d0955598345365.jpg)
bzmind
استاد ببخشید کامل متوجه نشدم، FormData چیه دقیقا، بعد من الان اون دیکشنری رو به لیست تبدیل کردم و الان CreateCategoryCommand این چیزارو تو پارامتر هاش داره:
![](/assets/questions/content/49bff507-7ecb-4b41-b8eb-b59c839d8c231844520090541.png)
اینم اکشنش توی کنترلر:
![](/assets/questions/content/9949ec6f-69ba-426d-91dd-3eabc0cbe8ca1845439872015.png)
و بعد توی Swagger اینجوری نمایش میده:
![](/assets/questions/content/a2f5018a-5baf-46bf-abe5-5e2b13f9c6931849068370484.png)
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
خوب اینو از FromForm استفاده نکنید ، زمانی FromForm استفاده میشه که قرار باشه یه فایلی Upload بشه ، همون FromBody بزارید که بصورت Json ارسالش کنه
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
و این مشکل هم احتمالا Swagger پشتیانیش نمیکنه ، تست کنید ببینم با PostMan هم این مشکل هست یا نه ولی درکل توی این مورد شما باید از FromBody استفاده کنید
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/5048777e-423b-46c3-9968-a0ecc498e69d0955598345365.jpg)
bzmind
راستی عکس رو باید از کنترلر پروداکت میفرستادم، اشتباه شد، اون موقع داشتم با کتگوری تست میکردم، آره برای کتگوری از FromBody استفاده میکنم، ولی پروداکت چون عکس قراره اپلود شه، هم فایل و هم json کنار هم باید ارسال بشن، اینجوریه کامندش:
![](/assets/questions/content/6ffd4ecd-cc06-4530-b6af-a7309fad805b2251485545412.png)
اینم توی Swagger:
![](/assets/questions/content/48f1c082-c377-436d-bbd9-a99c4ce5373f2254387856268.png)
اون 2 تا فیلد آخر ینی CustomSpecifications و ExtraDescriptions به صورت JSON هستن که اصلا درست ثبت نمیشن.
بعد من کُلی سرچ زدم، فک کنم باید یه Custom Model Binder بنویسم مخصوص اینجور جاها که قراره دیتا هم
multipart/form-data باشه هم application/json، البته فعلا سر در نمیارم زیاد یکم پیچیدست، نمیدونم اصلا بدردم میخوره یا نه ولی، باید تست کنم، شما تو پروژه ای به همچین موقعیتی برخوردید تا حالا؟
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
توی این حالت یه خورده پیچیده میشه ، مطمعا نیستم که بشه Array توی FormData ارسال کنید ( با Javascript تست کنید ببینم میشه یا نه )
اگر نشد میتونید از نوع string دریافتش کنید که توی Client یه json بهتون پاس بدن ، بعد توی برنامه اون json رو تبدیل به List کنید