efdc

آموزش Web API در Asp.net Core 7 و 8

کدسل برنامه نویسی وب Asp.Net Core

لینک کوتاه https://codecell.ir/course/efdc
900٬000تومان
مدرس: سهراب قیصری
تعداد ویدیوها: 39
مدت زمان دوره: 17:44:59
وضعیت دوره: به اتمام رسیده
آخرین بروزرسانی: 1403/02/21
به اشتراک گذاری
نظرات
2
دیگر آموزش های مدرس:
آموزش Web API در Asp.net Core 7

Web API چیست؟

اولین سوالی که به ذهن می رسد این است که "API چیست"؟

API مخفف Application Programming Interface است. API یک عامل نرم افزاری میانی است که به دو یا چند برنامه اجازه می دهد تا با یکدیگر تعامل داشته باشند.

حال سوال بعدی این است: “Web API چیست؟”

به زبان ساده می توان گفت که web API یک رابط برنامه نویسی کاربردی برای یک برنامه وب یا وب سرور است و از پروتکل HTTP برای برقراری ارتباط بین کلاینت و وب سایت ها برای دسترسی به داده ها استفاده می کند.

Asp.net Core Web API چیست؟

ASP.NET Core Web API یک چارچوب محبوب برای ساخت API های قدرتمند در وب و سی شارپ است که می تواند توسط طیف گسترده ای از کلاینت ها از جمله برنامه های کاربردی وب، برنامه های تلفن همراه و برنامه های دسکتاپ استفاده شود. Asp.net Core Web API یک چارچوب سبک و مقیاس پذیر برای ساختن API های RESTful در اختیار توسعه دهندگان قرار می دهد که می تواند برای نمایش داده ها و عملکردها در اختیار مشتریان خارجی باشد.

چرا Web API مورد نیاز است؟

کاربران می خواهد از دستگاه های مختلف مانند موبایل، مرورگر، دستگاه های گوگل و غیره به برنامه دسترسی داشته باشد. در این صورت Web API می تواند مفید باشد.

دستگاه های مختلف به Web API درخواست می دهند و Web API در قالب JSON پاسخ خواهد داد. اکثر دستگاه ها قادر به درک خروجی JSON هستند.

در تصویر زیر می توانید دیاگرام معماری web API را ببینید:

معماری Web API

این دیاگرام معماری Web API را توضیح می دهد:

  • کلاینت api/controller – در دیاگرام  بالا، مرورگرها، تلفن ها و دستگاه های گوگل را کنترلرهای Web API می نامند.
  • api/Controller با لایه business  تعامل دارد و داده ها را از DB دریافت می کند.
  • خروجی با فرمت JSON برگردانده می شود.

این Web API بسیار ابتدایی است.

تفاوت بین API و REST API چیست؟

همه API ها REST نیستند، اما همه سرویس های REST،  API هستند. بنابراین بین API و REST API تفاوت های وجود دارد:

  • API مخفف (Application Program Interface) و REST مخفف (Representational State Transfer) است.
  • وظیفه API اتصال یک برنامه به برنامه دیگر است. می توان گفت که یک رابط بین دو برنامه است. از طرف دیگر، REST API با استفاده از پروتکل های URL و HTTP ارتباط بین کلاینت و سرور را ایجاد می کند.
  • API های REST به طور گسترده برای تبادل داده بین سیستم ها یا برنامه ها استفاده می شوند. API خدماتی را برای برقراری ارتباط با سایر خدمات بدون نیاز به دانستن نحوه پیاده سازی آنها ارائه می دهد.
  • API مجموعه ای از توابع و رویه هایی است که به یک برنامه اجازه می دهد تا به ویژگی های برنامه دیگر دسترسی پیدا کند.
  • API از عملیات CRUD (Create Read Update Delete) پشتیبانی می کند زیرا با HTTP verb های  GET، PUT، POST و DELETE کار می کند.
  • REST API یک سرویس وب است که فقط از پروتکل HTTP پشتیبانی می کند در حالی که API از پروتکل HTTP/HTTPS پشتیبانی می کند.
  • وب سرویس از XML پشتیبانی می کند در حالی که API از XML و JSON پشتیبانی می کند.

تفاوت gRPC و REST چیست؟

سرویس های REST از یک مدل درخواست و پاسخ ارتباطی استفاده می کنند که معمولاً بر روی HTTP 1.1 ساخته شده است، اما gRPC  چارچوبی برای پیاده سازی API های RPC از طریق HTTP/2 است که نسبت به HTTP 1.1 هم سریع تر و هم ایمن تر است.

برای آشنایی بیشتر با gRPC دوره آموزش gRPC در Asp Core را مشاهده کنید.

چرا یادگیری ASP.NET Core Web API برای توسعه دهندگان اهمیت دارد؟

یادگیری API های وب برای توسعه دهندگان مهم است زیرا به آن ها امکان دسترسی به عملکرد سایر برنامه ها و خدمات را می دهد.  Web API به توسعه دهندگان اجازه می دهد تا به راحتی برنامه های کاربردی خود را با سیستم های دیگر مانند پلتفرم های رسانه های اجتماعی، پردازشگرهای پرداخت و سایر خدمات مبتنی بر وب ادغام کنند. علاوه بر این، درک API های وب به توسعه دهندگان اجازه می دهد تا با استفاده از قابلیت های سیستم های دیگر، برنامه های قدرتمندتر و انعطاف پذیرتری بسازند. Web API می تواند باعث توسعه سریع تر، افزایش عملکرد و بهبود تجربه کاربر شود.

در ادامه، ما به دلایل اهمیت استفاده ASP.NET Core Web API و این که چرا یک انتخاب برتر برای ساخت API های مدرن وب است، خواهیم پرداخت:

  • منبع باز: ASP.NET Core Web API یک چارچوب متن باز است، به این معنی که استفاده از آن رایگان است و می تواند برای رفع نیازهای خاص یک برنامه سفارشی شود. همچنین دارای یک جامعه بزرگ و فعال از توسعه دهندگان است که به طور مداوم در توسعه آن سهیم هستند و از توسعه دهندگان دیگر پشتیبانی می کنند.
  • ادغام آسان با سایر سرویس ها: ASP.NET Core Web API را می توان به راحتی با سایر سرویس ها و فریم ورک ها مانند Microsoft Azure,Vue.js,React و Angular ادغام کرد. این امر ساخت و استقرار برنامه های کاربردی خود را در محیط های مختلف و با طیف وسیعی از ابزارها برای توسعه دهندگان آسان می کند.
  • انعطاف‌پذیری: ASP.NET Core Web API درجه بالایی از انعطاف‌پذیری را در هنگام ساخت و استقرار برنامه‌های کاربردی به توسعه‌دهندگان ارائه می‌دهد. از طیف گسترده ای از فرمت های داده، از جمله JSON و XML پشتیبانی می کند و می تواند برای ساخت API برای انواع مختلف برنامه ها، از جمله برنامه های کاربردی وب، برنامه های تلفن همراه و برنامه های دسکتاپ استفاده شود.
  • امنیت: امنیت یک جنبه حیاتی در توسعه API وب است و ASP.NET Core Web API ویژگی های امنیتی متعددی را ارائه می دهد که می تواند به محافظت از API ها در برابر تهدیدات امنیتی رایج کمک کند. این شامل پشتیبانی از احراز هویت و صدور مجوز است که به توسعه دهندگان اجازه می دهد تا دسترسی به بخش های خاصی از API را بر اساس نقش ها یا مجوزهای کاربر محدود کنند. علاوه بر این، ASP.NET Core Web API شامل محافظت داخلی در برابر حملات XSS و CSRF است که آسیب پذیری های امنیتی رایجی هستند که می توانند امنیت API های وب را به خطر بیندازند.
  • تست: ASP.NET Core Web API طوری طراحی شده است که به راحتی قابل تست باشد، که این امر شناسایی و رفع اشکالات را برای توسعه دهندگان در مراحل اولیه فرآیند توسعه آسان تر می کند. Asp.net Core Web API شامل پشتیبانی داخلی برای تست واحد، تست مجتمع، و تست عملکردی است که می تواند به اطمینان از اینکه API ها طبق برنامه کار می کنند کمک کند.

سر فصل های دوره آموزش Web API در asp.net core 7 و asp.net core 8

ما در این دوره Web API را در قالب یک پروژه todo از مقدماتی تا پیشرفته با .net7 و .net8 به شما آموزش خواهیم داد. همچنین در این دوره آموزشی Minimal API ها را به صورت کامل و پیشرفته آموزش خواهیم داد.
 برخی از موضوعات مهمی که در این دوره به آن‌ ها خواهیم پرداخت عبارتند از:

  • معماری تمیز
  • ایجاد دیتابیس با روش کد فرست با استفاده از EF Core 7
  • استفاده از FluentApi
  • اعتبارسنجی داده ها با استفاده از FluentValidation در asp.net core Web API
  •  استفاده از AutoMapper در asp.net core Web API
  • استفاده از الگوی CQRS در asp.net core Web API
  • آموزش ایجاد و نحوه استفاده از Middleware ها در Asp.net Core Web API
  • آموزش GenericRepository در Asp.net Core Web APi
  • آموزش الگوی Unit of Work در asp.net core Web API
  • احراز هویت JWT در asp.net core Web API
  • مستندسازی API ها با استفاده از swagger در asp.net core Web API
  • استفاده از Memory Caching در asp.net core Web API
  • کار با ObjectResult ها، ProducesResponseType ها، Consume ها و Produce ها در asp.net core Web API
  • نحوه کانفیگ کردن ApiBehavior در  asp.net core Web API
  • نحوه ایجاد InputFormatter های اختصاصی در asp.net core Web API
  • ورژن بندی API ها در asp.net core Web API
  • کانفیگ Json در asp.net core Web API
  • مدیریت خطا در asp.net core Web API
  • کار با Filter ها در asp.net core Web API
  • کار با Postman
  • آموزش استفاده از GraphQL در Asp.net Core Web API
  • آموزش Minimal API ها در Asp.net Core
  • پیاده سازی Result Pattern و نحوه مدیریت خطا در دات نت 8
  • روش های سازماندهی Minimal API ها در دات نت 8
  • نحوه پیاده سازی و استفاده از Output Caching در دات نت 8 
  • نحوه پیاده سازی و استفاده از Response Caching در دات نت 8 

نتیجه گیری:

ASP.NET Core Web API یک چارچوب قدرتمند و محبوب برای ساختن API های قدرتمند در وب و c# است که می تواند توسط طیف گسترده ای از کلاینت ها استفاده شود. پشتیبانی از پلتفرم های مختلف، معماری سبک و مقیاس پذیر، ماهیت منبع باز، ادغام آسان با سایر سرویس ها، انعطاف پذیری، ویژگی های امنیتی و قابلیت های تست، آن را به بهترین انتخاب برای توسعه دهندگانی تبدیل می کند که به دنبال ساخت API های وب مقیاس پذیر و ایمن هستند. با مجموعه گسترده ای از ویژگی ها و اکوسیستم قوی، ASP.NET Core Web API مطمئناً برای سال های آینده یک رقیب برتر در دنیای توسعه API وب باقی خواهد ماند.

فهرست ویدیوها
مدت زمان دوره: 17:44:59
01

نحوه ایجاد ساختار معماری تمیز یا Clean architecture

00:22:21
02

ایجاد Entity ها، کانفیگ Entity ها با FluentApi، ایجاد مایگریشن و دیتابیس با روش کد فرست در asp.net core WebAPI

00:49:15
03

بررسی مایگریشن، نحوه بروزرسانی خودکار دیتابیس و ایجاد Respository در Asp.net Core Web API

00:30:51
04

بررسی Swagger، مفاهیم api و تفاوت های ApiController با MvcController

00:29:05
05

بررسی Status Code ها، ObjectResult ها و کانفیگ ApiBehavior در Asp.net Core Web API

00:43:49
06

بررسی ProducesResponseType ها، Consume ها و Produce ها در asp.net core Web API

00:23:14
07

نحوه ایجاد InputFormatter های اختصاصی در Asp.net Core Web API

00:14:19
08

استفاده از API Versioning در Asp.net Core Web API

00:36:06
09

افزودن api های ایجاد و دریافت todo

00:31:09
10

افزودن api های ویرایش و حذف todo

00:18:00
11

اعتبارسنجی داده ها با استفاده از FluentValidation در Asp.net Core Web API

00:26:01
12

آموزش استفاده از AutoMapper در Asp.net Core Web API

00:13:19
13

آموزش ارسال و ذخیره فایل در Asp.net Core Web API

00:31:02
14

آموزش استفاده از فیلترها، IActionFilter و ایجاد ObjectResult سفارشی در Asp.net Core Web API

00:37:30
15

آموزش مدیریت خطا و ایجاد یک Global Error Handling با استفاده از Exception Filter در Asp.net Core Web API

00:39:03
16

آموزش استفاده از الگوی CQRS با استفاده از Mediator در Asp.net Core Web API - قسمت اول

00:22:16
17

نحوه رجیستر کردن سرویس های Mediator و استفاده از آن در Asp.net Core Web API

00:15:12
18

استفاده از ورژن جدید Mediator و نحوه کانفیگ کردن Json در asp.net Core Web API

00:18:29
19

آموزش Middleware ها در Asp.net Core Web API

00:19:25
20

آموزش استفاده از Pipeline behaviour ها در MediatR

00:44:02
21

آموزش نحوه پیاده سازی و استفاده از Generic Repository در Asp.net Core Web API

00:26:14
22

نحوه استفاده و ذخیره DateTime در Web API و تبدیل تاریخ میلادی به شمسی و برعکس از طریق AutoMapper

00:20:34
23

افزودن api دسته بندی و نحوه مپ کردن روابط در AutoMapper

00:45:15
24

آموزش پیاده سازی الگوی طراحی Unit Of Work در Asp.net Core Web API

00:32:50
25

آموزش استفاده از کش در Asp.net Core Web API

00:24:24
26

آموزش افزودن Identity و شخصی سازی کردن آن در Asp.net Core Web API

00:38:37
27

آموزش پیاده سازی و استفاده از احراز هویت JWT در Asp.net Core Web API

01:06:09
28

آموزش پیاده سازی GraphQL و ایجاد Mutation ها و Query ها در Asp.Net Core Web API

00:41:12
29

آموزش نحوه کار با GraphQl، مدیریت خطا و اجرای GraphQl از طریق Postman

00:15:45
30

آموزش استفاده از احراز هویت JWT در GraphQL

00:08:14
31

استفاده از UI های AltAir و PlayGround برای GraphQL در Asp.Net Core Web API

00:10:35
32

نحوه استفاده از DocumentExecuter برای اجرای GraphQL از طریق کنترلر در Asp.Net Core Web API

00:15:00
33

آموزش پیشرفته Minimal API ها در Asp.net Core

00:44:03
34

پیاده سازی Result Pattern و نحوه مدیریت خطا در دات نت 8 با استفاده از Minimal API ها

00:22:38
35

روش های سازماندهی Minimal API ها در دات نت

00:11:57
36

Output Caching در ASP.NET Core 8.0

00:32:12
37

Response Caching در Asp.net core 8

00:17:05
38

نحوه استفاده از CancellationToken در Asp.net core 8

00:11:21
39

Streaming در Web API

00:16:26

پرسش های متداول

ASP.NET Core Web API چارچوبی برای ساخت سرویس های HTTP است که از هر کلاینتی از جمله مرورگرها و دستگاه های موبایل قابل دسترس است. asp.net core Web API یک پلت فرم ایده آل برای ساخت برنامه های RESTful بر روی فریمورک دات نت است.

ASP.NET Core از ایجاد Web API با استفاده از کنترلرها یا minimal API ها پشتیبانی می کند. کنترلرها در Web API کلاس هایی هستند که از ControllerBase مشتق می شوند.

تفاوت های کلیدی در مورد API وجود دارد، به ویژه در مورد Web API و REST API. در حالی که Web API یک تعامل سیستم به سیستم دارد، REST API راهی برای دسترسی به خدمات وب با استفاده از معماری استاندارد فراهم می کند.

هم API ها و هم وب سرویس ها فناوری هایی هستند که امکان انتقال داده ها را بین برنامه های کاربردی نرم افزاری جداگانه فراهم می کنند. API رابطی است که داده های یک برنامه را در معرض نرم افزارهای خارجی قرار می دهد، در حالی که برنامه های کاربردی وب یکی از انواع API با الزامات سخت گیرانه تر هستند.

API های وب به کسب و کارها اجازه می دهند به داده های شخص ثالث دسترسی داشته باشند و به طور یکپارچه آن ها را در هر کجا و هر زمان که لازم است ادغام کنند. Web API کارایی بی نظیری در پردازش داده ها و صرفه جویی در هزینه ارائه می دهند. API ها نحوه تعامل کسب و کارها با یکدیگر و را تغییر داده اند.

مقالات آموزش برنامه نویسی مدرس

Response Caching در ASP.NET Core

Response Caching یک مکانیزم ذخیره سازی پاسخ سرور توسط مرورگر یا سایر کلاینت ها است. با استفاده از Response Caching در Asp.net Core می توانیم عملکرد و کارایی سیستم را بالا ببریم.

303 0 1402/10/22

Output Caching در ASP.NET Core 8.0

Output Caching یک ویژگی جدید است که از زمان .NET 7 معرفی شده است. این ویژگی به ما این امکان را می دهد که به راحتی یک کش پاسخ برای Web API خود بدون پیاده سازی IMemoryCache راه اندازی کنیم.

353 0 1402/10/14

الگوی طراحی زنجیره مسئولیت در سی شارپ

الگوی زنجیره مسئولیت یا Chain of Responsibility Design Pattern یک الگوی طراحی رفتاری(behavioral design pattern) است که اجازه می‌دهد یک درخواست در امتداد زنجیره‌ای از کنترل‌کننده‌های بالقوه ارسال شود تا زمانی که درخواست مناسب برای پردازش آن را پیدا کند.

336 2 1402/10/01

ViewComponent در ASP.NET Core

در ASP.NET Core با استفاده از ViewComponent ها می توان اجزای ماژولار، قابل استفاده مجدد، قابل نگهداری و مقیاس پذیر برای ساخت برنامه های کاربردی وب ایجاد کرد. در این مقاله به نحوه ایجاد و فراخوانی ViewComponent در Asp.net core پرداخته ایم.

795 2 1402/05/15

تطبیق الگو در NET 7: ساده سازی تجزیه و تحلیل داده ها

تطبیق الگو یا Pattern Matching در net7 یک تکنیک قدرتمند برای تجزیه و تحلیل و دستکاری داده ها بر اساس ساختار آن ها است. تطبیق الگو یا Pattern Matching به توسعه دهندگان اجازه می دهد تا مقادیر را با یک الگوی خاص مطابقت دهند و اقدامات مربوطه را انجام دهند.

479 1 1402/04/05

تزریق وابستگی در ASP.NET Core

تزریق وابستگی (DI) یک الگوی طراحی نرم افزاری است که امکان ایجاد برنامه های کاربردی و ماژولار را فراهم می کند.. در .NET Core تزریق وابستگی یا Dependency injection یک ویژگی مهم است که می تواند برای ساده سازی توسعه برنامه، بهبود تست پذیری و کاهش پیچیدگی کد مورد استفاده قرار گیرد.

1٬161 1 1402/02/04

ضروری ترین کتابخانه های NuGet برای ASP.NET Core

در این مقاله مهمترین،ضروری ترین و پرکاربردترین کتابخانه های NuGet که هر توسعه‌ دهنده‌ ASP.NET Core باید برای توسعه بهتر و کاهش زمان مورد نیاز برای برنامه ‌های خود از آن استفاده کنند را مورد بررسی قرار داده ایم.

1٬113 1 1401/12/29

الگوی طراحی Factory در سی شارپ

الگوهای طراحی یکی از مهمترین جنبه های طراحی و معماری نرم افزار است. Factory Method یک الگوی طراحی ایجادی است که یک رابط برای ایجاد اشیاء در یک سوپر کلاس فراهم می‌کند. ما در این مقاله الگوی Factory Method Design در سی شارپ را بررسی می کنیم.

1٬139 1 1401/10/28

مقایسه List و Array در سی شارپ

آرایه و لیست در سی شارپ هر دو به عنوان مجموعه ای از مقادیر عمل می کنند، اما در نحوه ذخیره محتوای خود در حافظه و نحوه دسترسی به آنها متفاوت هستند. در این مقاله Benchmark و کارایی List<T> با سایز داینامیک، List<T> با سایز ثابت و Array ها را بررسی می کنیم.

1٬656 2 1401/09/01

LinkedList در سی شارپ

LinkedList یا لیست پیوندی در سی شارپ یک ساختار داده خطی است که عنصر را در مکان غیر پیوسته ذخیره می کند. LinkedList شامل گره هایی است که هر گره حاوی یک فیلد داده و یک مرجع (پیوند) به گره بعدی در لیست است. در سی شارپ، LinkedList یا لیست پیوندی یک نوع مجموعه جنریک است.

1٬592 0 1401/08/13

Garbage Collection در دات نت

به طور کلی، Garbage Collection (GC) یا جمع آوری زباله در .Net چیزی نیست جز به دست آوردن مجدد حافظه اختصاص داده شده به اشیایی که در حال حاضر در هیچ بخشی از برنامه ما استفاده نمی شوند. ما در این مقاله Garbage Collection را در سی شارپ بررسی خواهیم کرد.

2٬298 3 1401/03/30

.NET Core چیست؟

.Net (با تلفظ «دات نت») یک چارچوب نرم افزاری کامپیوتری مدیریت شده رایگان و منبع باز برای سیستم عامل های ویندوز، لینوکس و macOS است. این پروژه در درجه اول توسط کارمندان مایکروسافت از طریق دات نت توسعه یافته و تحت مجوز MIT منتشر شده است.

2٬082 2 1401/03/16

پشته(Stack) در سی شارپ

پشته یا Stack در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. پشته یک ساختار داده LIFO یا Last-In-First-Out است، به این معنی که آخرین موردی که در پشته قرار می گیرد اولین موردی است که از پشته خارج می شود.

1٬776 0 1401/03/09

صف (Queue) در سی شارپ

صف (Queue) در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. Queue یک ساختار داده first-in-first-out یا FIFO است که به این معنی است که اولین مورد اضافه شده به صف اولین موردی است که حذف می شود.

1٬780 0 1401/02/30

تفاوت Hashtable و Dictionary در سی شارپ

در سی شارپ از Hashtable و Dictionary می توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. با این تفاوت که Hashtable و Dictionary عناصر را به عنوان جفت Key/Value ذخیره می کنند.در این مقاله به تفاوت های Hashtable و Dictionary پرداخته شده است.

1٬511 1 1401/02/23

Dictionary در سی شارپ

در سی شارپ از دیکشنری ها (Dictionary) می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Dictionary می تواند عناصر را به عنوان جفت Key/Value ذخیره کند.Key ها باید منحصر به فرد و نمی توانند null باشند. Value ها می توانند تکراری یا null باشند.

1٬835 3 1401/02/17

Hashtable در سی شارپ

از Hashtable می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Hashtable می تواند عناصر را به عنوان جفت Key/Value به عنوان جایگزینی برای استفاده از Index ذخیره کند.

1٬475 5 1401/02/14

Redirect درخواست (ریدایرکت) در asp.net core

در برنامه های ASP.NET Core برای تغییر مسیر(ریدایرکت) و Redirect به یک URL خاص روش های مختلفی وجود دارد. در این مقاله با این تکنیک ها و کدهای مورد نیاز برای تغییر مسیر یک درخواست در ASP.NET Core آشنا می شویم.

2٬087 5 1401/02/12

تبدیل enum به لیست انتخابی در asp.net core

در این آموزش ما بوسیله Reflection ها در سی شارپ و asp.net core یک enum را به لیست انتخابی یا SelectListItem تبدیل خواهیم کرد و بوسیله تگ select در بوت استرپ 5 نمایش می دهیم.

1٬500 3 1401/02/03

نحوه ارسال ایمیل در asp و c#

امروزه ارسال ایمیل به امری ضروری در پروژه های وب تبدیل شده است.از ارسال ایمیل در asp می توان در بخش های تایید حساب کاربری،بازیابی رمز عبور،ایمیل مارکتینگ،ارسال خبرنامه و ... استفاده نمود.در این آموزش نحوه ارسال ایمیل در asp core و سی شارپ پیاده سازی گردیده است.

2٬118 5 1401/02/03
نظرات

برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید