কম্পিউটার

Asp.Net webAPI C#-এ DelegatingHandler-এর ব্যবহার কী?


একটি বার্তা হ্যান্ডলারে, বার্তা হ্যান্ডলারের একটি সিরিজ একসাথে শৃঙ্খলিত হয়। প্রথম হ্যান্ডলার একটি HTTP অনুরোধ গ্রহণ করে, কিছু প্রক্রিয়াকরণ করে এবং পরবর্তী হ্যান্ডলারকে অনুরোধটি দেয়। কিছু সময়ে, প্রতিক্রিয়া তৈরি হয় এবং চেইনে ফিরে যায়। এই প্যাটার্নটিকে একটি অর্পণকারী হ্যান্ডলার বলা হয়৷ .

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

টাস্ক SendAsync(HttpRequestMessage request,CancellationToken cancellationToken);

পদ্ধতিটি ইনপুট হিসাবে একটি HttpRequestMessage নেয় এবং অ্যাসিঙ্ক্রোনাসভাবে anHttpResponseMessage প্রদান করে। একটি সাধারণ বাস্তবায়ন নিম্নলিখিতগুলি করে -

  • অনুরোধের বার্তাটি প্রক্রিয়া করুন।
  • অভ্যন্তরীণ হ্যান্ডলারের কাছে অনুরোধ পাঠানোর জন্য base.SendAsync-এ কল করুন।
  • অভ্যন্তরীণ হ্যান্ডলার একটি প্রতিক্রিয়া বার্তা প্রদান করে। (এই ধাপটি অ্যাসিঙ্ক্রোনাস।)
  • প্রতিক্রিয়া প্রক্রিয়া করুন এবং কলারের কাছে ফেরত দিন।

উদাহরণ

public class CustomMessageHandler : DelegatingHandler{
   protected async override Task<HttpResponseMessage> SendAsync(
   HttpRequestMessage request, CancellationToken cancellationToken){
      Debug.WriteLine("CustomMessageHandler processing the request");
      // Calling the inner handler
      var response = await base.SendAsync(request, cancellationToken);
      Debug.WriteLine("CustomMessageHandler processing the response");
      return response;
   }
}

একজন প্রতিনিধি হ্যান্ডলার অভ্যন্তরীণ হ্যান্ডলারকে এড়িয়ে যেতে পারে এবং সরাসরি প্রতিক্রিয়া তৈরি করতে পারে।

উদাহরণ

public class CustomMessageHandler: DelegatingHandler{
   protected override Task<HttpResponseMessage> SendAsync(
   HttpRequestMessage request, CancellationToken cancellationToken){
      // Create the response
      var response = new HttpResponseMessage(HttpStatusCode.OK){
         Content = new StringContent("Skipping the inner handler")
      };
      // TaskCompletionSource creates a task that does not contain a delegate
      var taskCompletion = new TaskCompletionSource<HttpResponseMessage>();
      taskCompletion.SetResult(response);
      return taskCompletion.Task;
   }
}

  1. Asp.Net webAPI C#-এ অন্তর্নির্মিত বার্তা হ্যান্ডলারগুলি কী কী?

  2. C# ASP.NET WebAPI-তে Querystring প্যারামিটারের সাথে সংস্করণ কিভাবে করবেন?

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

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