কম্পিউটার টিউটোরিয়াল

C# ASP.NET WebAPI-এ DelegatingHandler-এর ব্যবহারিতা

একটি মেসেজ হ্যান্ডলারে, মেসেজ হ্যান্ডলারদের একটি সিরিজ একসাথে চেইন করা থাকে। প্রথম হ্যান্ডলার HTTP রিকোয়েস্ট পায়, কিছু প্রসেসিং করে, এবং রিকোয়েস্টটি পরবর্তী হ্যান্ডলারের কাছে পাস করে। 어느 시점에서 রেসপন্স তৈরি হয় এবং চেইনটি পেছনের দিকে ফেরত যায়। এই প্যাটার্নকে ডেলিগেটিং হ্যান্ডলার বলা হয়।

বিল্ট-ইন সার্ভার-सাইড মেসেজ হ্যান্ডলারদের পাশাপাশি, আমরা নিজস্ব সার্ভার-सাইড HTTP মেসেজ হ্যান্ডলারও তৈরি করতে পারি। ASP.NET Web API-এ একটি কাস্টম সার্ভার-सাইড HTTP মেসেজ হ্যান্ডলার তৈরি করতে আমরা DelegatingHandler ব্যবহার করি। আমাদের System.Net.Http.DelegatingHandler থেকে ডেরাইভ করা একটি ক্লাস তৈরি করতে হবে। সেই কাস্টম ক্লাসটি তখন SendAsync মেথড ওভাররাইড করা উচিত।

Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);

এই মেথড HttpRequestMessage ইনপুট হিসেবে নেয় এবং অ্যাসিঙ্ক্রোনাসভাবে HttpResponseMessage রিটার্ন করে। একটি সাধারণ ইমপ্লিমেন্টেশন নিচের কাজগুলো করে:

  • রিকোয়েস্ট মেসেজ প্রসেস করে।
  • base.SendAsync কল করে রিকোয়েস্টটি ইনার হ্যান্ডলারের কাছে পাঠায়।
  • ইনার হ্যান্ডলার একটি রেসপন্স মেসেজ রিটার্ন করে। (এই ধাপটি অ্যাসিঙ্ক্রোনাস।)
  • রেসপন্স প্রসেস করে এবং কলারের কাছে রিটার্ন করে।

উদাহরণ

public class CustomMessageHandler : DelegatingHandler
{ 
    protected async override Task SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    { 
        Debug.WriteLine("CustomMessageHandler processing the request"); 
        // ইনার হ্যান্ডলার কল করা
        var response = await base.SendAsync(request, cancellationToken); 
        Debug.WriteLine("CustomMessageHandler processing the response"); 
        return response; 
    } 
}

একটি ডেলিগেটিং হ্যান্ডলার ইনার হ্যান্ডলার বাইপাস করে সরাসরি রেসপন্সও তৈরি করতে পারে।

উদাহরণ

public class CustomMessageHandler: DelegatingHandler
{ 
    protected override Task SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    { 
        // রেসপন্স তৈরি করা
        var response = new HttpResponseMessage(HttpStatusCode.OK)
        { 
            Content = new StringContent("Skipping the inner handler") 
        }; 
        
        // TaskCompletionSource একটি টাস্ক তৈরি করে যাতে কোনো ডেলিগেট থাকে না
        var taskCompletion = new TaskCompletionSource(); 
        taskCompletion.SetResult(response); 
        return taskCompletion.Task; 
    } 
}
  1. C# ASP.NET WebAPI-এ বিল্ট-ইন মেসেজ হ্যান্ডলারগুলো কী?

  2. C# ASP.NET WebAPI-তে কোয়েরি স্ট্রিং প্যারামিটার দিয়ে ভার্সনিং কীভাবে করবেন?

  3. C# ASP.NET WebAPI-তে ফিল্টারের বিভিন্ন প্রকার কী কী?

  4. C# ASP.NET WebAPI-তে কন্ট্রোলার একশনের বিভিন্ন রিটার্ন টাইপ কী কী?