پرووید
منو

آموزش استفاده از HttpClient و API های .NET Core

زبان: فارسی (دوبله شده)مترجم: پروویددوبلر: پروویدسطح: مقدماتیمدت زمان: 03:20:58تعداد ویدئوها: 90فایل های پروژه: ناموجود
قیمت:۳٬۱۹۹٬۰۰۰ تومان
این آموزش بخشی از پکیج کامل آموزش برنامه نویسی Web API میانی است که می توانید از تمامی آموزش های آن دیدن کنید.

آموزش استفاده از HttpClient و API های .NET Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی استفاده از API ها در NET Core. با استفاده از کلاس HttpClient است که با نام اصلی Using HttpClient to Consume APIs in .NET Core از شرکت Pluralsight منتشر شده است.

مصرف کردن Web API در .NET با استفاده از HttpClient

دات نت 2.0 شامل کلاس WebClient برای ارتباط با web server با استفاده از پروتکل HTTP می باشد. با این حال کلاس WebClient محدودیت هایی داشت. دات نت 4.5 شامل کلاس HttpClient برای غلبه بر محدودیت WebClient است. در اینجا ما از کلاس HttpClient در برنامه کنسول برای ارسال داده ها و دریافت داده ها از Web API که روی سرور محلی IIS میزبانی می شود، استفاده می کنیم. شما می توانید از HttpClient در برنامه های دیگر .NET نیز مانند MVC Web اپلیکیشن و windows form اپلیکیشن و windows service اپلیکیشن و... استفاده کنید.

بیایید ببینیم چگونه از Web API برای استفاده از HttpClient در برنامه کنسول استفاده کنیم.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace MyWebAPI.Controller
{
    public class StudentController : ApiController
    {
        public IHttpActionResult GetAllStudents(bool includeAddress = false)
        {
            IList<StudentViewModel> students = null;

            using (var ctx = new SchoolDBEntities())
            {
                students = ctx.Students.Include("StudentAddress").Select(s => new StudentViewModel()
                {
                    Id = s.StudentID,
                    FirstName = s.FirstName,
                    LastName = s.LastName,
                    Address = s.StudentAddress == null || includeAddress == false ? null : new AddressViewModel()
                    {
                        StudentId = s.StudentAddress.StudentID,
                        Address1 = s.StudentAddress.Address1,
                        Address2 = s.StudentAddress.Address2,
                        City = s.StudentAddress.City,
                        State = s.StudentAddress.State
                    }
                }).ToList<StudentViewModel>();
            }

            if (students.Count == 0)
            {
                return NotFound();
            }

            return Ok(students);
        }

        public IHttpActionResult PostNewStudent(StudentViewModel student)
        {
            if (!ModelState.IsValid)
                return BadRequest("Not a valid data");

            using (var ctx = new SchoolDBEntities())
            {
                ctx.Students.Add(new Student()
                {
                    StudentID = student.Id,
                    FirstName = student.FirstName,
                    LastName = student.LastName
                });

                ctx.SaveChanges();
            }
            return Ok();
        }

        public IHttpActionResult Put(StudentViewModel student)
        {
            if (!ModelState.IsValid)
                return BadRequest("Not a valid data");

            using (var ctx = new SchoolDBEntities())
            {
                var existingStudent = ctx.Students.Where(s => s.StudentID == student.Id).FirstOrDefault<Student>();

                if (existingStudent != null)
                {
                    existingStudent.FirstName = student.FirstName;
                    existingStudent.LastName = student.LastName;

                    ctx.SaveChanges();
                }
                else
                {
                    return NotFound();
                }
            }
            return Ok();
        }


        public IHttpActionResult Delete(int id)
        {
            if (id <= 0)
                return BadRequest("Not a valid studet id");

            using (var ctx = new SchoolDBEntities())
            {
                var student = ctx.Students
                    .Where(s => s.StudentID == id)
                    .FirstOrDefault();

                ctx.Entry(student).State = System.Data.Entity.EntityState.Deleted;
                ctx.SaveChanges();
            }
            return Ok();
        }
    }
}
مرحله 1: ابتدا یک console application در Visual Studio 2013 برای دسکتاپ ایجاد کنید. مرحله 2:

کنسول NuGet Package Manager را از TOOLS -> NuGet Package Manager -> Package Manager Console باز کرده و دستور زیر را اجرا کنید.

Install-Package Microsoft.AspNet.WebApi.Client

مرحله 3: اکنون، یک کلاس مدل Student ایجاد کنید زیرا ما Student object را به API وب خود ارسال و دریافت می کنیم.
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}
ارسال GET Request مثال زیر یک درخواست HTTP GET به Student Web API ارسال می کند و نتیجه را در کنسول نمایش می دهد.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;

namespace HttpClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:60464/api/");
                //HTTP GET
                var responseTask = client.GetAsync("student");
                responseTask.Wait();

                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {

                    var readTask = result.Content.ReadAsAsync<Student[]>();
                    readTask.Wait();

                    var students = readTask.Result;

                    foreach (var student in students)
                    {
                        Console.WriteLine(student.Name);
                    }
                }
            }
            Console.ReadLine();
        }        
    }
}
  بیایید مثال بالا را مرحله به مرحله بررسی کنیم:

ابتدا ما یک object از HttpClient ایجاد کرده و آدرس اصلی Web API خود را اختصاص داده ایم. متد GetAsync درخواست http GET را به آدرس اینترنتی مشخص شده ارسال می کند. متد GetAsync که یک asynchronous است Task را برمی گرداند. Task.wait اجرا را به حالت تعلیق در می آورد تا زمانیکه متد GetAsync اجرا را به اتمام برساند و نتیجه ای را نشان دهد.

پس از اتمام اجرا، نتیجه Task را با استفاده از Task.result دریافت می کنیم که HttpResponseMessage است. اکنون، می توانید وضعیت پاسخ http را با استفاده از IsSuccessStatusCode بررسی کنید. محتوای content را با استفاده از روش ReadAsAsync بخوانید. بنابراین می توانید درخواست http GET را با استفاده از آبجکت HttpClient ارسال کرده و نتیجه را پردازش کنید.

ارسال POST Request

به طور مشابه، می توانید درخواست HTTP POST را با استفاده از متد PostAsAsync  به HttpClient ارسال کرده و نتیجه را مانند درخواست GET پردازش کنید.

آموزش عملی: به روز رسانی جزئی Resource ها با PatchAsync - نمونه ای از بخش بهبود عملکرد با Partial Updates در آموزش استفاده از HttpClient و API های .NET Core
نمونه ای از بخش «بهبود عملکرد با Partial Updates» در آموزش استفاده از HttpClient و API های .NET Core

مثال زیر درخواست http POST را به Web API ما ارسال می کند. این Student object  را به عنوان json قرار می دهد و پاسخ را برمی گرداند.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;

namespace HttpClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var student = new Student() { Name = "Steve" };

            var postTask = client.PostAsJsonAsync("student", student);
            postTask.Wait();

            var result = postTask.Result;
            if (result.IsSuccessStatusCode)
            {

                var readTask = result.Content.ReadAsAsync();
                readTask.Wait();

                var insertedStudent = readTask.Result;

                Console.WriteLine("Student {0} inserted with id: {1}", insertedStudent.Name, insertedStudent.Id);
            }
            else
            {
                Console.WriteLine(result.StatusCode);
            }
        }
    }
}

مدیریت درخواست‌های API با CRUD، DTO و انواع محتوا

هنگام کار با API، تنها ارسال یک درخواست و دریافت پاسخ کافی نیست؛ برنامه باید بتواند عملیات مختلفی مانند ایجاد، خواندن، به‌روزرسانی و حذف منابع را به‌درستی مدیریت کند. در این آموزش با استفاده از `HttpClient` برای انجام عملیات CRUD و کار با مدل‌های `DTO` آشنا می‌شوید و یاد می‌گیرید چگونه `Request Header`ها و انواع `Content Type` را تغییر دهید. انتخاب روش مناسب برای انتقال داده‌ها نیز اهمیت دارد، زیرا ساختار درخواست و پاسخ باید با قرارداد API هماهنگ باشد. این مباحث به شما کمک می‌کنند ارتباط میان برنامه و سرویس‌های خارجی را دقیق‌تر پیاده‌سازی کنید.

آموزش عملی: خواندن Response Body هنگام Streaming - نمونه ای از بخش هندل کردن Fault ها وError ها در آموزش استفاده از HttpClient و API های .NET Core
نمونه ای از بخش «هندل کردن Fault ها وError ها» در آموزش استفاده از HttpClient و API های .NET Core

در ادامه، به‌روزرسانی جزئی منابع با `PatchAsync` بررسی می‌شود؛ روشی که زمانی کاربرد دارد که قصد دارید تنها برخی از ویژگی‌های یک منبع را تغییر دهید. این رویکرد می‌تواند از ارسال داده‌های غیرضروری جلوگیری کند و با نیازهای API هماهنگ‌تر باشد. همچنین، با نحوه کار کردن با انواع مختلف داده در درخواست‌ها و پاسخ‌ها آشنا می‌شوید تا هنگام توسعه کلاینت‌های مبتنی بر .NET Core، انتخاب‌های آگاهانه‌تری داشته باشید. تمرکز این مباحث بر پیاده‌سازی عملی ارتباطات HTTP و مدیریت صحیح داده‌های تبادل‌شده است.

افزایش کارایی HttpClient با Stream، لغو درخواست و تست واحد

در برنامه‌هایی که با پاسخ‌های حجیم یا درخواست‌های طولانی سروکار دارند، نحوه دریافت و پردازش محتوا می‌تواند بر مصرف حافظه و پاسخ‌گویی برنامه تأثیر بگذارد. این آموزش استفاده از `Stream`ها و تنظیم `HttpCompletionMode` را بررسی می‌کند تا بتوانید داده‌ها را متناسب با نیاز برنامه دریافت کنید. ترکیب جریان‌های داده هنگام ارسال و خواندن محتوا نیز از موضوعات عملی این آموزش است. علاوه بر این، قابلیت لغو درخواست‌ها را یاد می‌گیرید تا در صورت تغییر نیاز کاربر یا بی‌نیاز شدن برنامه از نتیجه، عملیات HTTP بتواند متوقف شود.

مدیریت طول عمر نمونه‌های `HttpClient` بخش مهم دیگری از این آموزش است. با `HttpClientFactory` و نمونه‌های نوع‌دار یا `Typed Clients` آشنا می‌شوید تا پیکربندی و استفاده مجدد از کلاینت‌ها ساختارمندتر شود و مشکلات ناشی از مدیریت نامناسب نمونه‌ها کاهش یابد. سپس، مدیریت خطاها و استفاده از `DelegatingHandler`های سفارشی برای گسترش رفتار درخواست‌ها مطرح می‌شود. بخش تست واحد نیز به شما کمک می‌کند منطق وابسته به HTTP را آزمایش کنید و برای بررسی رفتار کلاینت، صرفاً به اجرای دستی درخواست‌ها متکی نباشید.

سرفصل مطالب آموزش ویدیویی استفاده از HttpClient و API های NET Core.

فصل اول: مقدمه این دوره آموزشی
  • مقدمه این دوره آموزشی
فصل دوم: ارتباط برقرار کردن با یک API با استفاده از کلاس HttpClient
  • مقدمه
  • پیش نیازهای این دوره آموزشی
  • بررسی Framework ها و Tooling
  • بررسی سیستم عامل های پشتیبانی شده و Framework ها و NET Standard 2..
  • پلتفرم هایی که .NET Standard 2.0 را پیاده سازی می کنند
  • آموزش عملی: معرفی برنامه نمایشی
  • استراتژی های کار کردن با کلاس های DTO Model
  • ایجاد کلاس های DTO
  • آموزش عملی: ایجاد کلاس های DTO
  • مقابله با ادغام با HttpClient
  • جمع بندی
فصل سوم: هندل کردن انواع مختلفی از Integration (CRUD) ها
  • مقدمه
  • آموزش عملی: ساختن Resource
  • کار کردن با Header ها و Content Negotiation
  • آموزش عملی: تغییر دادن Request Header ها
  • مشخص کردن Preference ها با استفاده از Relative Quality Parameter
  • آموزش عملی: نشان دادن Preference ها با Relative Quality Parameter
  • آموزش عملی: کارکردن مستقیم با HttpRequestMessage
  • آموزش عملی: ایجاد کردن Resource ها
  • تنظیم Request Header ها
  • بررسی Content Type ها
  • آموزش عملی: به روز رسانی Resource
  • آموزش عملی: حذف یک Resource
  • آموزش عملی: استفاده از میانبرها
  • جمع بندی
فصل چهارم: بهبود عملکرد با Partial Updates
  • مقدمه
  • معرفی JSON Patch
  • آموزش عملی: به روز رسانی جزئی Resource ها
  • آموزش عملی: به روز رسانی جزئی Resource ها با PatchAsync
  • سناریوهای پیشرفته Patch
  • جمع بندی
فصل پنجم: بهبود عملکرد حافظه با استفاده از Stream ها
  • مقدمه
  • مزایای کار با Stream ها
  • استفاده از Stream ها هنگام خواندن داده ها
  • آموزش عملی: استفاده از Stream ها هنگام خواندن داده ها
  • بهبود استفاده از حافظه و کارایی آن با استفاده از HttpCompletionMode
  • آموزش عملی: بهبود استفاده از حافظه و کارایی آن با استفاده از HttpCompletionMode
  • آموزش عملی: بهبود استفاده از Code Reuse با Extension Method
  • آموزش عملی: تست کردن بهبود عملکرد هنگام خواندن داده ها
  • استفاده از Stream ها هنگام ارسال داده
  • آموزش عملی: استفاده از Stream ها هنگام ارسال داده
  • استفاده از Stream ها هنگام ارسال و خواندن داده ها
  • آموزش عملی: ترکیب Stream ها هنگام ارسال و خواندن داده ها
  • آموزش عملی: تست کردن بهبود عملکرد ها هنگام ارسال داده
  • نکاتی درمورد استفاده از Stream و استفاده از حافظه و Performance
  • کار کردن با Compression
  • جمع بندی
فصل ششم: پشتیبانی از کنسل کردن
  • مقدمه
  • چرا کنسل کردن Request ها مهم است؟
  • بررسی CancellationTokenSource و CancellationToken
  • آموزش عملی: لغو کردن درخواست
  • آموزش عملی: کار کردن ابتدایی با CancellationTokenSource
  • آموزش عملی: بررسی درخواست لغو شده
  • مدیریت Timeout ها
  • جمع بندی
فصل هفتم: بهبود HttpClient و مدیریت Instance با استفاده از HttpClientFactory
  • مقدمه
  • مشکل مربوط به Dispose کردن Instance های HttpClient قسمت1
  • آموزش عملی: مشکل مربوط به Dispose کردن Instanceهای HttpClient
  • مشکل مربوط به Dispose کردن Instanceهای HttpClient قسمت 2
  • معرفی HttpClientFactory
  • آموزش عملی: استفاده از HttpClientFactory برای مدیریت Instanceهای HttpClient
  • آموزش عملی: استفاده از Instance های نامگذاری شده و Default ها
  • آموزش عملی: پیکربندی کردن Primary Message Handler
  • آموزش عملی: کار کردن با Typed Instance ها
  • آموزش عملی: استفاده از Typed Instance ها با پیکربندی Type-scoped
  • آموزش عملی: گسترش دادن Typed Instance ها با استفاده از Interaction Method ها
  • جمع بندی
فصل هشتم: هندل کردن Fault ها وError ها
  • مقدمه
  • بررسی کردن Status Code ها
  • آموزش عملی: بازرسی Status Code ها
  • بررسی کردن Response Message ها
  • آموزش عملی: خواندن Response Body هنگام Streaming
  • کارکردن با بهترین روش ها در API ها
  • جمع بندی
فصل نهم: گسترش دادن HttpClient با استفاده از HttpMessageHandler های سفارشی
  • مقدمه
  • بررسی الگو Delegating Handler
  • پیاده سازی Retry Policy
  • آموزش عملی: پیاده سازی Retry Policy
  • پیاده سازی کردن یک Handler برای کارکردن با Time-out ها
  • آموزش عملی: پیاده سازی یک کنترل کننده برای مقابله با Time-out ها
  • موارد استفاده دیگر برای Delegating Handlers
  • استفاده از Polly برای بهبود تعاملات با یک API
  • جمع بندی
فصل دهم: تست واحد با HttpClient
  • مقدمه
  • بررسی Unit Test با HttpClient
  • آموزش عملی: پیاده سازی یک Handler سفارشی برای Unit Test با HttpClient
  • آموزش عملی: نوشتن یکUnit Test
  • آموزش عملی: بهبود دادن تکنیک Mocking با استفاده از Moq
  • جمع بندی
دیدگاه کاربران

دیدگاه ها

برای ثبت دیدگاه ابتدا وارد حساب کاربری شوید.
هنوز دیدگاهی برای این محصول تایید نشده است.