c# - एएसपी.नेट एमवीसी 5 त्रुटि हैंडलिंग




asp.net-mvc error-handling (2)

हम 403 त्रुटियों, 404 त्रुटियों, MySpecialDomainException कारण सभी त्रुटियों को संभालना चाहते हैं और अन्य सभी त्रुटियों के लिए एक डिफ़ॉल्ट त्रुटि पृष्ठ प्रदान करते हैं (आईआईएस कॉन्फ़िगरेशन में त्रुटियों सहित!)। सभी त्रुटियों को उचित रेजर दृश्य वापस करना चाहिए, विचारों के सामने एक ErrorController होना बहुत अच्छा होगा। इस तरह कुछ करें:

public class ErrorController : Controller
{
    public ViewResult NotFound () { return View(); }
    public ViewResult Forbidden () { return View(); }
    public ViewResult Default ()
    {
        var ex = ObtainExceptionFromSomewhere();
        if(ex is MySpecialDomainException)
            return View("MySpecialDomainException", new ErrorModel { Exception = ex });

        return View("GeneralError", new ErrorModel { Exception = ex });
    }
}

वर्तमान में आपको www पर ऐसा करने के कई अलग-अलग तरीके मिलते हैं, कुछ संभवतः पुराना है। उनके बीच:

  • Controller.OnException ()
  • त्रुटि फ़िल्टर करें
  • web.config में customErrors तत्व
  • Global.asax के अनुप्रयोग_इरर में हैंडलिंग

प्रश्न 1: एएसपी.नेट एमवीसी 5 के साथ हमारी आवश्यकताओं को पूरा करने के लिए अनुशंसित तरीका क्या है?

इसके अलावा हम आईआईएस होस्ट में होने वाली त्रुटियों को पकड़ना चाहते हैं। प्रश्न 2: आईआईएस को रोकने के लिए किसी भी 404 को संभालना है, हमने सोचा कि सभी संभावित यूआरएल से मेल खाता एक डिफ़ॉल्ट मार्ग जोड़ना है - क्या यह अनुशंसित है? आईआईएस के 404 के लिए पंजीकरण करने के लिए बेहतर है?

प्रश्न 3: क्या आईआईएस त्रुटि पृष्ठ को पंजीकृत करना भी संभव है जो नियंत्रक के पास वापस जाता है, या आईआईएस केवल एएसपीएक्स / स्थिर एचटीएमएल के लिए सक्षम है?


सबसे अच्छा तरीका ग्लोबल.एक्सएक्स का उपयोग कर रहा है, क्योंकि आप सभी प्रकार की त्रुटियों का प्रबंधन कर सकते हैं (अजाक्स कॉल / सभी अप्रत्याशित त्रुटियां)। दूसरों के साथ आप यह नहीं कर सकते हैं।

इस कदर:

protected void Application_Error()
{
    HttpContext httpContext = HttpContext.Current;
    if (httpContext != null)
    {
        RequestContext requestContext = ((MvcHandler)httpContext.CurrentHandler).RequestContext;
        /* When the request is ajax the system can automatically handle a mistake with a JSON response. 
           Then overwrites the default response */
        if (requestContext.HttpContext.Request.IsAjaxRequest())
        {
            httpContext.Response.Clear();
            string controllerName = requestContext.RouteData.GetRequiredString("controller");
            IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
            IController controller = factory.CreateController(requestContext, controllerName);
            ControllerContext controllerContext = new ControllerContext(requestContext, (ControllerBase)controller);

            JsonResult jsonResult = new JsonResult
            {
                Data = new { success = false, serverError = "500" },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            jsonResult.ExecuteResult(controllerContext);
            httpContext.Response.End();
        }
        else
        {
            httpContext.Response.Redirect("~/Error");
        }
    }
}

सभी अनुप्रयोगों के लिए कोई सुनहरा समाधान नहीं है।

आप web.config में httpErrors का उपयोग करके एक दोस्ताना त्रुटि पृष्ठ प्रदर्शित कर सकते हैं। CustomErrors के विपरीत यह एक आईआईएस स्तर सेटिंग है और आपको त्रुटियों के लिए एक दोस्ताना त्रुटि पृष्ठ भी दिखाएगा जो ASP.NET के भीतर से नहीं हैं।

त्रुटि लॉगिंग के लिए मैं ELMAH जैसे HttpModule के साथ जाने की अनुशंसा करता हूं: https://code.google.com/p/elmah/

मैंने इस बारे में एक संपूर्ण ब्लॉग पोस्ट लिखा और जहां मैं त्रुटि प्रबंधन के विभिन्न तरीकों की व्याख्या करता हूं: http://dusted.codes/demystifying-aspnet-mvc-5-error-pages-and-error-logging





asp.net-mvc-5.1