دریافت خروجی Curl از HttpClient در دات نت (.Net)

درود فراوان. امیدوارم حالتون خوب باشه و روز های فوق العاده ای را در حال سپری کردن باشید.در این مقاله قصد دارم راجب یک Extension در دات نت صحبت کنم که خیلی وقت ها می تواند بسیار مفید و نجات بخش و همینطور در زمان کارتون تاثیر زیادی بگذارد.خیلی وقت ها پیش اومده که داریم با یک سرویس بیرونی ارتباط برقرار میکنیم اما هنگام فراخوانی کردن با خطا مواجه می شویم و ما متوجه دلیل خطا رخ داده در لحظه نمی شویم. برای خود من بار ها پیش اومده که Property های اطلاعات ورودی برای وب سرویس را بصورت Pascal Case داده باشم ولی سرویس بیرونی بصورت Camel Case فقط برای آن قابل قبول بوده است و من بعد از ساعت ها بررسی متوجه این موضوع می شدم و یا ممکن بود یک Property با مقدار نادرست ارسال می کردم و یا ممکن بود یک Property رو اصلا ارسال نمی کردم. و یا حتی اینکه یک Header رو درست نمی فرستادم.و کلی از این موضوعات که باهاشون برخورد کردیم هممون و با صرف زمان مشکل رو حل کردیم.این 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 می تواند تاثیر گذار باشد زمانی است که ما از نحوه فراخوانی سرویس های بیرونی خود که در سیستم نوشته شده هیچ داکیومنت یا Postman Collection نداریم. ما با این Extension با خروجی Curl که در اختیارمون می گذارد می توانیم Collection خود را ایجاد کنیم و در اختیار هم تیمی های خود قرار دهیم.می بینید که چقدر کارها را ساده و راحت می کند!استفاده از این Extension بسیار ساده و سریع است و شما با نوشتن یک خط می توانید آن را فراخوانی کنید.آدرس Nuget Package: https://www.nuget.org/packages/HttpClientToCurl/ این Extension سه(۳) راه برای نمایش Curl دارد:۱- چاپ در ConsolehttpClient.GenerateCurlInConsole(httpRequestMessage, null);پارامتر دوم کانفیگ هست که شما می توانید بنا به نیاز آنها را تغییر دهید. (پیش فرض null است.)مثال و توضیحات کانفیگ به شرح زیر است:httpClient.GenerateCurlInConsole( httpRequestMessage, configs => { configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; configs.EnableCodeBeautification = false; });مقدارTurnOn پیش فرض فعال است. درصورت غیرفعال کردن جنریتور غیر فعال می شود و عمل ایجاد اسکریپت را انجام نمی دهد.مقدارNeedAddDefaultHeaders می توانید مشخص کنید در صورت داشتن هدر های پیش فرض در خروجی Curl اضافه شود یا خیر.پیش فرض فعال هست.مقدارEnableCodeBeautification اگر فعال باشد اسکریپت های چاپ شده در Console به ازای هر HttpMethod رنگ متفاوتی نشان می دهد.برای خوانایی بهتر اسکریپت.بصورت پیش فرض غیر فعال است.۲- ذخیره در فایلhttpClient.GenerateCurlInFile(httpRequestMessage, null);پارامتر دوم کانفیگ هست که شما می توانید بنا به نیاز آنها را تغییر دهید. (پیش فرض null است.)مثال و توضیحات کانفیگ به شرح زیر است:httpClient.GenerateCurlInFile( httpRequestMessage, configs => { configs.Filename = &quotyour filename&quot configs.Path = &quotyour path&quot configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; });مقدارFilename اگر وارد کنید می توانید نام فایل که ایجاد می شود را مشخص کنید. در صورت مقدار ندادن پیش فرض تاریخ روز جاری رو اعمال میکند.مثال: 20220910.curlمقدارPath می توانید در صورت داشتن مسیر خاص مشخص کنید. در غیر این صورت بصورت پیش فرض در مسیر ProjectDirectory\bin\Debug\netX ذخیره می کند.مقدارTurnOn پیش فرض فعال است. درصورت غیرفعال کردن جنریتور غیر فعال می شود و عمل ایجاد اسکریپت را انجام نمی دهد.مقدارNeedAddDefaultHeaders می توانید مشخص کنید در صورت داشتن هدر های پیش فرض در خروجی Curl اضافه شود یا خیر.پیش فرض فعال هست.۳- ذخیره در متغیر:httpClient.GenerateCurlInString(httpRequestMessage);لینک آدرس GitHub پروژه جهت برای دیدن سورس پروژه و دیدن مثال های بیشتر: https://github.com/amingolmahalle/HttpClientToCurlGenerator خوشحال می شوم اگه نظری دارید راجب پروژه و یا مشکلی دیدید در سورس کد به من اطلاع بدهید و خیلی خوشحال می شوم اگر در تکمیل و پیاده سازی این پروژه مشارکت کنید. و اگه این پروژه براتون جذاب و یا مفید بود استار بدهید.آدرس Gmail من : amin.golmahalle@gmail.comخوش باشید.