دیباگ کردن HttpClient در دات نت | Net.

یکشنبه 2 اردیبهشت 1403

یک Nuget Package به نام HttpClientToCurl که با استفاده از آن می توانیم یک خروجی curl از اطلاعات HttpClient قبل از ارسال درخواست به سرویس های بیرونی بگیریم و همینطور علت خطاهایی که هنگام ارسال درخواست رخ میدهد را بهتر و سریعتر بررسی کنیم.

درود فراوان. امیدوارم حالتون خوب باشه و روز های فوق العاده ای را در حال سپری کردن باشید.

در این مقاله قصد دارم راجب یک Extension در دات نت صحبت کنم به نام HttpClientToCurl که خیلی وقت ها می تواند بسیار مفید و نجات بخش و همینطور در زمان کارتون تاثیر زیادی بگذارد.

خیلی وقت ها پیش اومده که داریم با یک سرویس بیرونی ارتباط برقرار میکنیم اما هنگام فراخوانی کردن با خطا مواجه می شویم و ما متوجه دلیل خطا رخ داده در لحظه نمی شویم. برای خود من بار ها پیش اومده که 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 دارد:

 

۱- چاپ در Console:

httpClient.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 اضافه شود یا خیر.پیش فرض فعال هست.

۳- ذخیره در متغیر:

string curlResult = httpClient.GenerateCurlInString(httpRequestMessage);

 

لینک آدرس GitHub پروژه جهت دیدن سورس پروژه و دیدن مثال های بیشتر:

https://github.com/amingolmahalle/HttpClientToCurlGenerator

خوشحال می شوم اگه نظری دارید راجب پروژه و یا مشکلی دیدید در سورس کد به من اطلاع بدهید و خیلی خوشحال می شوم اگر در تکمیل و پیاده سازی این پروژه مشارکت کنید. و اگه این پروژه براتون جذاب و یا مفید بود استار بدهید.

آدرس Gmail من : amin.golmahalle@gmail.com

خوش باشید.

امین گل محله

نویسنده 1 مقاله در برنامه نویسان
  • C#.net
  • 287 بازدید
  • 0 تشکر

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

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید

نظرات کاربران

برای درج نظر باید وارد سایت شوید