6

में त्रुटि प्रबंधन के साथ उलझन में मुझे 1 त्रुटि पृष्ठ होना चाहिए जो प्रदान की गई क्वेरी स्ट्रिंग के आधार पर उपयोगकर्ता को थोड़ा अलग त्रुटि संदेश प्रदर्शित करता है।एएसपीनेट 5 एमवीसी 6

मैंने एक नया asp.net 5 प्रोजेक्ट बनाते समय Startup.cs फ़ाइल में निम्न कोड देखा है।

if (env.IsDevelopment()) 
{ 
    app.UseBrowserLink(); 
    app.UseDeveloperExceptionPage(); 
} 
else 
{ 
    app.UseExceptionHandler("/Home/Error"); 
} 

अपवाद होने पर मैं सही त्रुटि पृष्ठ प्रदर्शित करने में सक्षम हूं। मेरी समस्या यह है कि ऐसा लगता है कि यह केवल उन त्रुटियों को पकड़ता है जिन्हें मेरे आवेदन में नहीं रखा गया है यानी 500 के स्टेटस कोड के साथ हमेशा। क्या ये सही है?

app.UseStatusCodePagesWithReExecute("/Error/{0}"); 

मेरी नियंत्रक के साथ के रूप में लागू:

[HttpGet("{statusCode}")] 
public IActionResult Error(int statusCode) 
{ 
    return View(statusCode); 
} 

यह 404 त्रुटियों को पकड़ने के लिए लगता है और सही स्थिति कोड

404 त्रुटियों मैं निम्नलिखित कोड का उपयोग कर रहा संभालने के लिए।

अगर मैं अगर बयान उदाहरण के लिए एक ही कार्रवाई का उपयोग करने के ऊपर में मेरी कोड अद्यतन:

if (env.IsDevelopment()) 
{ 
    app.UseBrowserLink(); 
    app.UseDeveloperExceptionPage(); 
} 
else 
{ 
    app.UseExceptionHandler("/Error/{0}"); 
} 

स्थिति लौटा कोड हमेशा 0.

है इसके अलावा क्या होगा जब एक 400 में, 403 या कोई अन्य होता है? क्या वे पकड़े जाएंगे? यदि ऐसा है तो उन्हें किस बिंदु पर पकड़ा जाएगा?

जैसा कि आप बता सकते हैं कि मैं बहुत उलझन में हूं और किसी के लिए मुझे एक उदाहरण प्रदान करने के लिए प्यार होगा जहां सभी अलग-अलग स्टेटस कोड हैंडल किए जाते हैं।

+0

अभ्यस्त Global.asax मदद के अंदर Application_Error घटना में त्रुटि को पकड़ने globaly? http://stackoverflow.com/questions/16884074/asp-net-mvc-plication-error-handler-in-global-asax –

+0

यह एएसपीनेट एमवीसी 5 जैसा दिखता है? –

+0

क्या आप कृपया 'UseExceptionHandler' के कोड पोस्ट कर सकते हैं? – Mairaj

उत्तर

18

ऐसा लगता है कि आप अनचाहे अपवादों को भ्रमित कर रहे हैं (जो डिफ़ॉल्ट रूप से, क्लाइंट को HTTP 500 आंतरिक सर्वर त्रुटि के रूप में लौट आए हैं) और उपयोगकर्ता/क्लाइंट की ओर से अमान्य कार्रवाई के कारण सही ढंग से प्रबंधित त्रुटि मामलों (जहां उपयोगकर्ता को एक 4xx HTTP कोड वापस कर दिया जाता है)।

केवल इनमें से पूर्व में UseExceptionHandler कॉल के साथ कुछ भी करना है - डिफ़ॉल्ट रूप से यह किसी भी अनचाहे अपवादों को पकड़ लेगा और जो भी आप प्रदान करते हैं उन्हें रूट करें (आपके मामले में, एक दृश्य, लेकिन यह आसानी से एक टुकड़ा हो सकता है कोड जो कुछ त्रुटि मामलों को HTTP 4xx रिटर्न कोड में परिवर्तित करने के लिए अनचाहे अपवादों का निरीक्षण करता है - उदाहरण के लिए, HTTP 401 प्रतिक्रियाओं में प्रमाणीकरण त्रुटियां)।

UseStatusCodePagesWithReExecute 400-599 का स्टेटस कोड उत्पन्न हुआ है, तब तक जब तक कोई प्रतिक्रिया निकाय पहले से उत्पन्न नहीं हुआ है। source code in question दिखाता है कि यह कैसे निर्धारित किया जाता है।

अपने दूसरे कोड ब्लॉक में, आप UseExceptionHandler का उपयोग किया है - मुझे लगता है कि आप निम्नलिखित होना चाहिए:

if (env.IsDevelopment()) 
{ 
    app.UseBrowserLink(); 
    app.UseDeveloperExceptionPage(); 
} 
else 
{ 
    // Handle unhandled errors 
    app.UseExceptionHandler("/Home/Error"); 
    // Display friendly error pages for any non-success case 
    // This will handle any situation where a status code is >= 400 
    // and < 600, so long as no response body has already been 
    // generated. 
    app.UseStatusCodePagesWithReExecute("/Error/{0}"); 
} 
+0

ठीक है जो आपने कहा है, वह समझ में आता है। मेरी एकमात्र क्वेरी यह है कि किस प्रकार के त्रुटि कोड कोड की इस पंक्ति में होंगे: app.UseStatusCodePagesWithReExecute ("/ error/{0}"); 404 के अलावा पकड़ो? –

+2

यहां [निश्चित उत्तर] है (https://github.com/aspnet/Diagnostics/blob/dev/src/Microsoft.AspNetCore.Diagnostics/StatusCodePage/StatusCodePagesMiddleware.cs#L42) उस पर - कोई भी स्थिति कोड है 400 से 600, समावेशी, जहां कोई प्रतिक्रिया निकाय पहले से ही उत्पन्न नहीं हुआ है, UseStatusCodePages द्वारा संभाला जाएगा। मैं इसे प्रतिबिंबित करने के लिए उत्तर अपडेट करूंगा। –

+0

एक सटीक उत्तर thnx @MarkHughes – Drakoumel

संबंधित मुद्दे