खोज…


टिप्पणियों

मिडलवेयर एक सॉफ्टवेयर घटक है जो यह निर्धारित करेगा कि अनुरोध को कैसे संसाधित किया जाए और यह तय किया जाए कि इसे एप्लिकेशन पाइपलाइन में अगले घटक में पारित किया जाए या नहीं। प्रत्येक मिडलवेयर की रिक्वेस्ट पर प्रीफॉर्म करने के लिए एक अलग विशिष्ट भूमिका और क्रियाएं होती हैं।

कस्टम JSON त्रुटि क्लाइंट को भेजने के लिए ExceptionHandler मिडलवेयर का उपयोग करना

अपनी कक्षा को परिभाषित करें जो आपकी कस्टम त्रुटि का प्रतिनिधित्व करेगी।

public class ErrorDto
{
   public int Code { get; set; }
   public string Message { get; set; }

   // other fields

   public override string ToString()
   {
      return JsonConvert.SerializeObject(this);
   }
}

उसके बाद अगला ExceptionHandler मिडिलवेयर कॉन्फ़िगर करें विधि के लिए। ध्यान दें कि मिडलवेयर ऑर्डर महत्वपूर्ण है।

app.UseExceptionHandler(errorApp =>
    {
        errorApp.Run(async context =>
        {
            context.Response.StatusCode = 500; // or another Status 
            context.Response.ContentType = "application/json";

            var error = context.Features.Get<IExceptionHandlerFeature>();
            if (error != null)
            {
                var ex = error.Error;

                await context.Response.WriteAsync(new ErrorDto()
                {
                    Code = <your custom code based on Exception Type>,
                    Message = ex.Message // or your custom message
                    
                    ... // other custom data
                }.ToString(), Encoding.UTF8);
            }
        });
    });

प्रतिक्रिया सामग्री सेट करने के लिए मिडलवेयर

HttpContext.Response.OnStarting कॉलबैक का उपयोग करने का विचार है, क्योंकि यह अंतिम घटना है जिसे हेडर भेजे जाने से पहले निकाल दिया जाता है। निम्नलिखित को अपने मिडलवेयर Invoke विधि में जोड़ें।

public async Task Invoke(HttpContext context)
{
    context.Response.OnStarting((state) =>
    {
        if (context.Response.StatusCode == (int)HttpStatusCode.OK)
        {
           if (context.Request.Path.Value.EndsWith(".map"))
           {
             context.Response.ContentType = "application/json";
           }
        }          
        return Task.FromResult(0);
    }, null);

    await nextMiddleware.Invoke(context);
}

मिडलवेयर चेन के माध्यम से डेटा पास करें

प्रलेखन से :

HttpContext.Items संग्रह डेटा को संग्रहीत करने के लिए सबसे अच्छा स्थान है जो केवल किसी दिए गए अनुरोध को संसाधित करते समय आवश्यक है। प्रत्येक अनुरोध के बाद इसकी सामग्री को छोड़ दिया जाता है। यह घटकों या मिडलवेयर के बीच संवाद स्थापित करने के साधन के रूप में सबसे अच्छा उपयोग किया जाता है जो एक अनुरोध के दौरान समय पर विभिन्न बिंदुओं पर काम करते हैं, और एक दूसरे के साथ कोई सीधा संबंध नहीं है जिसके माध्यम से मापदंडों या रिटर्न मानों को पारित करना है।

HttpContext.Items एक सरल शब्दकोष प्रकार IDictionary<object, object> का संग्रह है। यह संग्रह है

  • HttpRequest की शुरुआत से उपलब्ध है
  • और प्रत्येक अनुरोध के अंत में छोड़ दिया जाता है।

आप इसे कीड प्रविष्टि के लिए एक मान निर्दिष्ट करके, या किसी दिए गए कुंजी के लिए मूल्य का अनुरोध करके एक्सेस कर सकते हैं।

उदाहरण के लिए, कुछ सरल मिडलवेयर आइटम संग्रह में कुछ जोड़ सकते हैं:

app.Use(async (context, next) =>
{
    // perform some verification
    context.Items["isVerified"] = true;
    await next.Invoke();
});

और बाद में पाइपलाइन में, मिडलवेयर का एक और टुकड़ा इसे एक्सेस कर सकता है:

app.Run(async (context) =>
{
    await context.Response.WriteAsync("Verified request? " + context.Items["isVerified"]);
});

भागो, मानचित्र, उपयोग

Daud

चेन को समाप्त करता है। इसके बाद कोई अन्य मिडलवेयर विधि नहीं चलेगी। किसी भी पाइपलाइन के अंत में रखा जाना चाहिए।

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello from " + _environment);
});

उपयोग

अगले प्रतिनिधि से पहले और बाद में कार्रवाई करता है।

app.Use(async (context, next) =>
{
    //action before next delegate
    await next.Invoke(); //call next middleware
    //action after called middleware
});

यह कैसे काम करता है इसका विस्तार: यहाँ छवि विवरण दर्ज करें

MapWhen

शाखा पाइपलाइन को सक्षम करता है। यदि शर्त पूरी होती है, तो निर्दिष्ट मिडलवेयर चलाता है।

private static void HandleBranch(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Condition is fulfilled");
    });
}

public void ConfigureMapWhen(IApplicationBuilder app)
{
    app.MapWhen(context => {
        return context.Request.Query.ContainsKey("somekey");
    }, HandleBranch);
}

नक्शा

मैपवैन के समान। यदि पैरामीटर में प्रदान किए गए पथ के बराबर पथ का अनुरोध किया जाता है तो मिडलवेयर चलाता है।

private static void HandleMapTest(IApplicationBuilder app)
{
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Map Test Successful");
    });
}

public void ConfigureMapping(IApplicationBuilder app)
{
    app.Map("/maptest", HandleMapTest);

}

ASP.net कोर डॉक्स के आधार पर



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow