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

Using HttpClient to Consume APIs in .NET Core pic
تعداد ویدئو 90
زمان دوره 03:20:58
مترجم مرتضی گیتی
دوبلر مرتضی گیتی
سایت منتشر کننده پلوال سایت

آموزش استفاده از 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 ارسال کرده و نتیجه را پردازش کنید.

Using-HttpClient-to-Consume-APIs-in-.NET-Core-snapshot

ارسال POST Request

به طور مشابه، می توانید درخواست HTTP POST را با استفاده از متد PostAsAsync  به HttpClient ارسال کرده و نتیجه را مانند درخواست GET پردازش کنید. مثال زیر درخواست 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);
            }
        }
    }
}

سرفصل مطالب آموزش ویدیویی استفاده از 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
  • جمع بندی

نقد و بررسی‌ها

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

اولین کسی باشید که دیدگاهی می نویسد “آموزش استفاده از HttpClient و API های .NET Core”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دسته های محصولات

افزودن به سبد خرید