در این مقاله قصد دارم راجعبه یک Extension در دات نت صحبت کنم که خیلی وقتها میتواند بسیار مفید و نجات بخش و همینطور در زمان کارتان تاثیر زیادی بگذارد. خیلی وقتها پیش آمده که داریم با یک سرویس بیرونی ارتباط برقرار میکنیم، اما هنگام فراخوانی کردن، با خطا مواجه میشویم و ما متوجه دلیل خطای رخ داده در آن لحظه نمیشویم. برای خود من بارها پیش آمده که Propertyهای اطلاعات ورودی برای وب سرویس را بصورت Pascal Case داده باشم، ولی سرویس بیرونی فقط بصورت Camel Case برای آن قابل قبول بودهاست و من بعد از ساعتها بررسی متوجه این موضوع میشدم و یا ممکن بود یک Property با مقدار نادرست ارسال میکردم و یا ممکن بود یک Property را اصلا ارسال نمیکردم و یا حتی اینکه یک Header را درست نمیفرستادم و کلی از این موضوعات که با آنها برخورد کردیم و با صرف زمان، مشکل را حل کردیم. این Extension کار ما را برای حل این مسائل خیلی راحت میکند.
حالا چطور و چگونه ازش استفاده کنیم؟!
این Extension کارش این است، وقتی HttpClient ما مقدار دهی شده و آمادهی برای ارسال درخواست به سرویس بیرونی است، میتوانیم قبل ارسال، آن را فراخوانی کنیم و یک خروجی Curl از درخواستی را که داریم میفرستیم، ببینیم. سپس خروجی Curl را در ترمینال صدا بزنیم و نتیجه را ببینیم. همینطور میتوانیم به Postman خود Import کنیم و با داکیومنتی که داده شده، بررسی کنیم و مشکل را دقیقتر بررسی کنیم.
نحوه Import کردن Curl در Postman
جای دیگری که نقش این Extension میتواند تاثیر گذار باشد، زمانی است که ما از نحوهی فراخوانی سرویسهای بیرونی خود که در سیستم نوشته شده، هیچ داکیومنت یا Postman Collection ای نداریم. ما با این Extension با خروجی Curl که در اختیارمان میگذارد، میتوانیم Collection خود را ایجاد کنیم و در اختیار هم تیمیهای خود قرار دهیم. میبینید که چقدر کارها را ساده و راحت میکند!
استفاده از این Extension بسیار ساده و سریع است و شما با نوشتن یک خط میتوانید آن را فراخوانی کنید:
حالا چطور و چگونه ازش استفاده کنیم؟!
این Extension کارش این است، وقتی HttpClient ما مقدار دهی شده و آمادهی برای ارسال درخواست به سرویس بیرونی است، میتوانیم قبل ارسال، آن را فراخوانی کنیم و یک خروجی Curl از درخواستی را که داریم میفرستیم، ببینیم. سپس خروجی Curl را در ترمینال صدا بزنیم و نتیجه را ببینیم. همینطور میتوانیم به Postman خود Import کنیم و با داکیومنتی که داده شده، بررسی کنیم و مشکل را دقیقتر بررسی کنیم.
نحوه Import کردن Curl در Postman
open the Postman -> click on the Import button -> select the Raw text tab -> paste the curl script here -> then press the Continue button -> at the end press the button import.
استفاده از این Extension بسیار ساده و سریع است و شما با نوشتن یک خط میتوانید آن را فراخوانی کنید:
آدرس Nuget Package
این Extension سه(۳) راه برای نمایش Curl دارد:
۱- چاپ در Console
پارامتر دوم، کانفیگ هست که شما میتوانید بنا به نیاز، آنها را تغییر دهید (پیش فرض آن null است). مثال و توضیحات کانفیگ به شرح زیر است:
- مقدارTurnOn پیش فرض فعال است؛ درصورت غیرفعال کردن جنریتور، غیر فعال میشود و عمل ایجاد اسکریپت را انجام نمیدهد.
- با مقدارNeedAddDefaultHeaders میتوانید مشخص کنید در صورت داشتن هدرهای پیش فرض، در خروجی Curl اضافه شود یا خیر. پیش فرض آن فعال هست.
- مقدارEnableCodeBeautification اگر فعال باشد اسکریپتهای چاپ شده در Console را به ازای هر HttpMethod، با رنگ متفاوتی نشان میدهد؛ برای خوانایی بهتر اسکریپت. بصورت پیش فرض غیر فعال است.
۲- ذخیره در فایل
پارامتر دوم کانفیگ هست که شما میتوانید بنا به نیاز، آنها را تغییر دهید (پیش فرض آن null است).
مثال و توضیحات کانفیگ به شرح زیر است:
- مقدارFilename را اگر وارد کنید، میتوانید نام فایلی را که ایجاد میشود، مشخص کنید. در صورت مقدار ندادن، پیش فرض تاریخ روز جاری را اعمال میکند. مثال: 20220910.curl
- مقدارPath را میتوانید در صورت داشتن مسیری خاص، مشخص کنید. در غیر این صورت بصورت پیش فرض اطلاعات را در مسیر ProjectDirectory\bin\Debug\netX ذخیره میکند.
- مقدارTurnOn پیش فرض آن فعال است. درصورت غیرفعال کردن جنریتور غیر فعال میشود و عمل ایجاد اسکریپت را انجام نمیدهد.
- با مقدار NeedAddDefaultHeaders میتوانید مشخص کنید در صورت داشتن هدرهای پیش فرض، در خروجی Curl اضافه شود یا خیر. پیش فرض آن فعال هست.
۳- ذخیره در متغیر
لینک آدرس GitHub پروژه جهت دیدن سورس پروژه و دیدن مثالهای بیشتر و همینطور برای دیدن قابلیتهای بیشتر این extension.
این Extension سه(۳) راه برای نمایش Curl دارد:
۱- چاپ در Console
httpClient.GenerateCurlInConsole(httpRequestMessage, null);
httpClient.GenerateCurlInConsole( httpRequestMessage, configs => { configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; configs.EnableCodeBeautification = false; });
- با مقدارNeedAddDefaultHeaders میتوانید مشخص کنید در صورت داشتن هدرهای پیش فرض، در خروجی Curl اضافه شود یا خیر. پیش فرض آن فعال هست.
- مقدارEnableCodeBeautification اگر فعال باشد اسکریپتهای چاپ شده در Console را به ازای هر HttpMethod، با رنگ متفاوتی نشان میدهد؛ برای خوانایی بهتر اسکریپت. بصورت پیش فرض غیر فعال است.
۲- ذخیره در فایل
httpClient.GenerateCurlInFile(httpRequestMessage, null);
مثال و توضیحات کانفیگ به شرح زیر است:
httpClient.GenerateCurlInFile( httpRequestMessage, configs => { configs.Filename = "your filename"; configs.Path = "your path"; configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; });
- مقدارPath را میتوانید در صورت داشتن مسیری خاص، مشخص کنید. در غیر این صورت بصورت پیش فرض اطلاعات را در مسیر ProjectDirectory\bin\Debug\netX ذخیره میکند.
- مقدارTurnOn پیش فرض آن فعال است. درصورت غیرفعال کردن جنریتور غیر فعال میشود و عمل ایجاد اسکریپت را انجام نمیدهد.
- با مقدار NeedAddDefaultHeaders میتوانید مشخص کنید در صورت داشتن هدرهای پیش فرض، در خروجی Curl اضافه شود یا خیر. پیش فرض آن فعال هست.
۳- ذخیره در متغیر
httpClient.GenerateCurlInString(httpRequestMessage);
لینک آدرس GitHub پروژه جهت دیدن سورس پروژه و دیدن مثالهای بیشتر و همینطور برای دیدن قابلیتهای بیشتر این extension.
خوشحال میشوم اگه نظری دارید راجع به پروژه و یا مشکلی دیدید در سورس کد به من اطلاع بدهید و خیلی خوشحال میشوم اگر در تکمیل و پیاده سازی این پروژه مشارکت کنید و اگر این پروژه براتون جذاب و یا مفید بود استار بدهید.