ویرگول
ورودثبت نام
سمانه شریفی
سمانه شریفی
سمانه شریفی
سمانه شریفی
خواندن ۲ دقیقه·۳ ماه پیش

آموزش استفاده از HttpClient در C# و .NET

در C# و .NET، کلاس HttpClient یکی از ابزارهای اصلی برای ارسال درخواست‌های HTTP و دریافت پاسخ‌ها از سرورها است. وقتی می‌خواهید از برنامه خود با یک وب‌سرویس (API) یا یک وب‌سایت ارتباط برقرار کنید، HttpClient به شما این امکان را می‌دهد.

ویژگی‌های مهم HttpClient

  • ارسال درخواست‌ها: GET, POST, PUT, DELETE و غیره.

  • دریافت پاسخ‌ها: شامل محتوای HTML، JSON، XML یا فایل‌ها.

  • پشتیبانی از async/await: عملیات شبکه به صورت غیرهمزمان انجام می‌شود و برنامه بلوکه نمی‌شود.

  • مدیریت هدرها و کوکی‌ها: امکان شخصی‌سازی درخواست‌ها و مدیریت زمان‌بندی.


1️⃣ استفاده مستقیم از HttpClient

public class PostsController : ControllerBase { [HttpGet] public async Task<IActionResult> GetAll() { using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/"); var result = await client.GetStringAsync("/posts"); var finalResult = JsonConvert.DeserializeObject<List<Post>>(result); return Ok(finalResult); } } }

✅ مزیت: ساده و مستقیم
⚠️ نکته: ایجاد HttpClient در هر درخواست می‌تواند منابع را هدر دهد و باعث مشکلات اتصال شود.


2️⃣ استفاده از Named Client

در Program.cs:

builder.Services.AddHttpClient("posts", client => { client.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/"); });

در کنترلر:

public class PostsController : ControllerBase { private readonly IHttpClientFactory _httpClientFactory; public PostsController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [HttpGet] public async Task<IActionResult> GetAll() { using (var client = _httpClientFactory.CreateClient("posts")) { var result = await client.GetStringAsync("/posts"); var finalResult = JsonConvert.DeserializeObject<List<Post>>(result); return Ok(finalResult); } } }

✅ مزیت: مدیریت بهتر منابع و قابلیت استفاده مجدد از HttpClient


3️⃣ استفاده از Typed Client

در Program.cs:

builder.Services.AddHttpClient<PostService>() .AddHttpMessageHandler<LogHttpRequest>();

ایجاد کلاس PostService:

public class PostService { private readonly HttpClient _httpClient; public PostService(HttpClient httpClient) { _httpClient = httpClient; _httpClient.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/"); } public async Task<List<Post>> GetAll() { var stringResult = await _httpClient.GetStringAsync("/posts"); return JsonConvert.DeserializeObject<List<Post>>(stringResult); } }

در کنترلر:

public class PostsTypedController : ControllerBase { private readonly PostService _postService; public PostsTypedController(PostService postService) { _postService = postService; } [HttpGet] public async Task<IActionResult> GetAll() { return Ok(await _postService.GetAll()); } }

✅ مزیت: جداسازی منطق HTTP و سرویس‌دهی، قابلیت تست و نگهداری بهتر.


💡 جمع‌بندی:

  • برای پروژه‌های کوچک و سریع، استفاده مستقیم کافی است.

  • برای پروژه‌های بزرگ و مقیاس‌پذیر، بهتر است از Named یا Typed Client استفاده کنید تا مدیریت منابع و نگهداری آسان‌تر شود.

زمانdotnethttpclientprogramming
۱
۰
سمانه شریفی
سمانه شریفی
شاید از این پست‌ها خوشتان بیاید