<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Amin Golmahalleh</title>
        <link>https://virgool.io/feed/@amin.golmahalle</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 05:42:20</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/64107/avatar/dux7Vf.jpg?height=120&amp;width=120</url>
            <title>Amin Golmahalleh</title>
            <link>https://virgool.io/@amin.golmahalle</link>
        </image>

                    <item>
                <title>دیباگ کردن HttpClient در دات نت (NET.)</title>
                <link>https://virgool.io/@amin.golmahalle/%D8%AF%DB%8C%D8%A8%D8%A7%DA%AF-%DA%A9%D8%B1%D8%AF%D9%86-httpclient-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-net-jm0kcsmucrbk</link>
                <description>درود فراوان به همه دوستان خوبم.تو این مقاله میخواهم راجب نحوه دیباگ کردن HttpClient در .NET صحبت کنم.اینکه چطور میشود قبل از ارسال درخواست به سمت فراهم کننده یا سرویس بیرونی بیایم ببینیم چه اطلاعاتی در HttpClient مقداردهی شده و قرار است ارسال بشود.برای دیباگ کردن و دیدن اطلاعات در HttpClient من یک اکستنشن نوشتم که کارش این است که اطلاعات در HttpClient را در قالب اسکریپت curl در اختیارتون قرار بده تا شما از صحت اطلاعاتی که دارید برای سرویس بیرونی ارسال می کنید مطمئن شوید. و همینطور میتوانید خروجی curl را در Postman تان import کنید و در آن بررسی و تست کنید.این Extension نحوه استفاده از آن بسیار ساده و حجم آن بسیار کم هست.برای شروع کافیه پکیج HttpClientToCurl را نصب کنید در پروژه مورد نظرتان. آدرس پکیج در nuget را هم براتون میزارم.(توجه: این اکستنشن با همه نسخه های دات نت سازگاری دارد.)dotnet add package HttpClientToCurl https://www.nuget.org/packages/HttpClientToCurl/ بعدش خیلی ساده فقط با یک خط کد می توانید به سه روش خروجی اسکریپت curl خودتوت را دریافت کنید.۱- خروجی در یک متغیر رشته ای ذخیره شود:string curl = httpClient.GenerateCurlInString(httpRequestMessage);۲- خروجی در کنسول IDE یا Text Editor شما نشان داده شود:httpClient.GenerateCurlInConsole(httpRequestMessage);۳- خروجی در یک فایل ذخیره شود:httpClient.GenerateCurlInFile(httpRequestMessage);با هرکدوم از این سه روش متناسب با نیاز خود می توانید به راحتی در صورت مشکل در ارسال درخواست به سرویس بیرونی را پیدا و حل کنید.البته این اکستنشن برای هر سه حالت یک سری آپشن هم دارد که بهتون کلی ویژگی و امکانات مفید میدهد جهت تولید اسکریپت curl.شما می توانید تو این مقاله ای که نوشتم جزییات امکاناتی که دارد را هم مشاهده کنید و از استفاده کردن آن در پروژه هاتون لذت ببرید.https://vrgl.ir/FPx11همینطور من لینک سورس این اکستنشن در GitHub را اینجا قرار می دهم برای دیدن مثال های بیشتر و توضیحات بیشتر درباره مزیت های این اکستنشن.https://github.com/amingolmahalle/HttpClientToCurlGeneratorو همین طور خیلی ممنون می شوم اگر نظر و یا پیشنهادی درباره پروژه و یا حتی مشارکت در توسعه این پروژه داشته باشید به من اطلاع بدهید.شاد باشید.</description>
                <category>Amin Golmahalleh</category>
                <author>Amin Golmahalleh</author>
                <pubDate>Sat, 02 Mar 2024 23:54:38 +0330</pubDate>
            </item>
                    <item>
                <title>دریافت خروجی Curl از HttpClient در دات نت (.Net)</title>
                <link>https://virgool.io/@amin.golmahalle/%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-curl-%D8%A7%D8%B2-httpclient-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-vgamgtw2midt</link>
                <description>درود فراوان. امیدوارم حالتون خوب باشه و روز های فوق العاده ای را در حال سپری کردن باشید.در این مقاله قصد دارم راجب یک Extension در دات نت صحبت کنم که خیلی وقت ها می تواند بسیار مفید و نجات بخش و همینطور در زمان کارتون تاثیر زیادی بگذارد.خیلی وقت ها پیش اومده که داریم با یک سرویس بیرونی ارتباط برقرار میکنیم اما هنگام فراخوانی کردن با خطا مواجه می شویم و ما متوجه دلیل خطا رخ داده در لحظه نمی شویم. برای خود من بار ها پیش اومده که Property های اطلاعات ورودی برای وب سرویس را بصورت Pascal Case داده باشم ولی سرویس بیرونی بصورت Camel Case فقط برای آن قابل قبول بوده است و من بعد از ساعت ها بررسی متوجه این موضوع می شدم و یا ممکن بود یک Property با مقدار نادرست ارسال می کردم و یا ممکن بود یک Property رو اصلا ارسال نمی کردم. و یا حتی  اینکه یک Header رو درست نمی فرستادم.و کلی از این موضوعات که باهاشون برخورد کردیم هممون و با صرف زمان مشکل رو حل کردیم.این Extension کار ما رو  برای حل این مسائل خیلی راحت می کند.حالا چطور و چگونه ازش استفاده کنیم؟!این Extension کارش این است وقتی HttpClient مان مقدار دهی شده و آماده برای ارسال درخواست به سرویس بیرونی است. می توانیم قبل ارسال آن را فراخوانی کنیم و یک خروجی Curl از درخواستی رو که داریم می فرستیم را  ببینیم. سپس خروجی Curl را در ترمینال صدا بزنیم و نتیجه رو ببینیم. همینطور می توانیم به Postman خود Import کنیم و با داکیومنت که داده شده بررسی کنیم و مشکل را دقیق تر بررسی کنیم.نحوه Import کردن Curl در Postman:open the Postman -&gt; click on the Import button -&gt; select the Raw text tab -&gt; paste the curl script here -&gt; then press the Continue button -&gt; 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 =&gt;
            {
                configs.TurnOn = true;
                configs.NeedAddDefaultHeaders = true;
                configs.EnableCodeBeautification = false;
            });مقدارTurnOn پیش فرض فعال است. درصورت غیرفعال کردن جنریتور غیر فعال می شود و عمل ایجاد اسکریپت را انجام نمی دهد.مقدارNeedAddDefaultHeaders می توانید مشخص کنید در صورت داشتن هدر های پیش فرض در خروجی Curl اضافه شود یا خیر.پیش فرض فعال هست.مقدارEnableCodeBeautification اگر فعال باشد اسکریپت های چاپ شده در Console به ازای هر HttpMethod رنگ متفاوتی نشان می دهد.برای خوانایی بهتر اسکریپت.بصورت پیش فرض غیر فعال است.۲- ذخیره در فایلhttpClient.GenerateCurlInFile(httpRequestMessage, null);پارامتر دوم کانفیگ هست که شما می توانید بنا به نیاز آنها را تغییر دهید. (پیش فرض null است.)مثال و توضیحات کانفیگ به شرح زیر است:httpClient.GenerateCurlInFile(
            httpRequestMessage,
            configs =&gt;
            {
                configs.Filename = &amp;quotyour filename&amp;quot
                configs.Path = &amp;quotyour path&amp;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خوش باشید.</description>
                <category>Amin Golmahalleh</category>
                <author>Amin Golmahalleh</author>
                <pubDate>Tue, 13 Sep 2022 12:22:10 +0430</pubDate>
            </item>
            </channel>
</rss>