मेरा ऐप ASP.NET Core RC2
चला रहा है, और मैं इस बात से उलझन में हूं कि स्टेटस कोड और अपवाद हैंडलर मिडलवेयर कैसे काम करता है।अपवाद अलग-अलग पृष्ठों पर रीडायरेक्ट क्यों करता है?
मेरा ऐप निम्न मध्यवर्ती के साथ कॉन्फ़िगर किया गया है।
app.UseStatusCodePagesWithReExecute("/Error/Status/{0}");
app.UseExceptionHandler("/Error/ServerError");
नियंत्रक हैंडल जो देखने इसे वापस करना चाहिए:
[HttpGet]
public IActionResult Status(int id)
{
switch (id)
{
case 404:
return View("404");
case 400:
return View("400");
case 500:
return View("500");
default:
return View("501");
}
}
[HttpGet]
public IActionResult ServerError()
{
return View();
}
जब मैं एक अज्ञात URL पर पहुंच यह 404 page
वापस आ जाएगी स्थिति कार्रवाई से अपेक्षा के अनुरूप।
जब मैं अपवाद फेंकने वाली किसी क्रिया पर नेविगेट करता हूं तो यह स्थिति क्रिया से /Error/ServerError
पर 500 page
पर जाएगा।
public IActionResult ThrowException()
{
throw new Exception();
}
अगर मैं एक ऐसी कार्रवाई StatusCodeResult(500);
रिटर्न यह स्थिति कार्रवाई से 500 page
वापस आ जाएगी पर जाएँ।
[HttpGet]
public IActionResult Error500()
{
return new StatusCodeResult(500);
}
मुझे क्या confuses सांत्वना पता चलता है कि दोनों परिणाम वापस 500 (Internal Server Error)
लेकिन वे कैसे वे मिडलवेयर के आधार पर एक अलग पेज पर पहुंच जाएंगे लौटा दिया जाता है पर निर्भर करता है है।
ऐसा क्यों है?
मुझे यकीन है कि नहीं हूँ, लेकिन मैं की समीक्षा की 'aspnet/Diagnostics' और मैं' StatusCodePagesMiddleware' में हालत निम्नलिखित देखा: 'अगर (context.Response.HasStarted || ...) {वापसी;} '। इसके अलावा 'अपवाद हैडलर मिडलवेयर' संदर्भ में। प्रतिक्रिया। ऑनस्टार्टिंग (_clearCacheHeadersDelegate, संदर्भ। प्रतिक्रिया); '। मुझे लगता है कि 'StatusCodePagesMiddleware' ने स्टेटस कोड संभाला है, प्रतिक्रिया पहले से ही' अपवाद हैन्डलर मिडलवेयर 'द्वारा शुरू की गई है। –