asp.net mvc - एएसपी.नेट एमवीसी हैंडलरर




asp.net-mvc custom-error-pages (4)

मैं asp.net एमवीसी पूर्वावलोकन 5 में [HandleError] फ़िल्टर के बारे में कैसे जा सकता हूं?
मैंने अपनी Web.config फ़ाइल में customErrors सेट किया है

<customErrors mode="On" defaultRedirect="Error.aspx">
  <error statusCode="403" redirect="NoAccess.htm"/>
  <error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>

और इस तरह मेरे नियंत्रक वर्ग के ऊपर [हैंडलरर] डालें:

[HandleError]
public class DSWebsiteController: Controller
{
    [snip]
    public ActionResult CrashTest()
    {
        throw new Exception("Oh Noes!");
    }
}

तब मैंने अपने नियंत्रकों को इस वर्ग से प्राप्त करने दिया और उन पर क्रैशटेस्ट () को कॉल किया। विजुअल स्टूडियो त्रुटि पर रोकता है और जारी रखने के लिए f5 दबाए जाने के बाद, मुझे error.aspx? Aspxerrorpath = / sxi.mvc / क्रैशटेस्ट (जहां sxi प्रयुक्त नियंत्रक का नाम होता है) बंद हो जाता है। बेशक पथ नहीं मिल सकता है और मुझे मिलता है "सर्वर त्रुटि '/' अनुप्रयोग।" 404।

यह साइट पूर्वावलोकन 3 से 5 तक पोर्ट की गई थी। त्रुटि प्रबंधन को छोड़कर सब कुछ चलता है (बंदरगाह के लिए इतना काम नहीं था)। जब मैं एक पूर्ण नई परियोजना बनाता हूं तो त्रुटि प्रबंधन काम करता प्रतीत होता है।

विचार?

--ध्यान दें--
चूंकि इस प्रश्न में अब 3K से अधिक विचार हैं, मैंने सोचा कि मैं वर्तमान में जो (एएसपी.नेट एमवीसी 1.0) उपयोग कर रहा हूं, उसे रखना फायदेमंद होगा। एमवीसी contrib प्रोजेक्ट में "RescueAttribute" नामक एक शानदार विशेषता है, आपको शायद इसे भी देखना चाहिए;)


500 त्रुटि कोड के लिए समाधान 500 पर यह एक विशेषता है जिसे [ERROR] ने एक क्रिया पर रखा है

public class Error: System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
    {

            if (filterContext.HttpContext.IsCustomErrorEnabled)
            {
                filterContext.ExceptionHandled = true;

            }
            base.OnException(filterContext);
            //OVERRIDE THE 500 ERROR  
           filterContext.HttpContext.Response.StatusCode = 200;
    }

    private static void RaiseErrorSignal(Exception e)
    {
        var context = HttpContext.Current;
      // using.Elmah.ErrorSignal.FromContext(context).Raise(e, context);
    } 

}

//उदाहरण:

[Error]
[HandleError]
[PopulateSiteMap(SiteMapName="Mifel1", ViewDataKey="Mifel1")]
public class ApplicationController : Controller
{
}

आप Error.aspx अनुपलब्ध हैं :) पूर्वावलोकन 5 में, यह आपके दृश्य / साझा फ़ोल्डर में स्थित है। बस इसे एक नई पूर्वावलोकन 5 परियोजना से कॉपी करें।


यह भी ध्यान दिया जाना चाहिए कि त्रुटियां जो http त्रुटि कोड को 500 पर सेट नहीं करती हैं

(उदाहरण के लिए अनधिकृत एक्सेस अपवाद)

हैंडलर फ़िल्टर द्वारा संभाला नहीं जाएगा।


    [HandleError]
    public class ErrorController : Controller
    {        
        [AcceptVerbs(HttpVerbs.Get)]
        public ViewResult NotAuthorized()
        {
            //401
            Response.StatusCode = (int)HttpStatusCode.Unauthorized;

        return View();
    }

    [AcceptVerbs(HttpVerbs.Get)]
    public ViewResult Forbidden()
    {
        //403
        Response.StatusCode = (int)HttpStatusCode.Forbidden;

        return View();
    }

    [AcceptVerbs(HttpVerbs.Get)]
    public ViewResult NotFound()
    {
        //404
        Response.StatusCode = (int)HttpStatusCode.NotFound;
        return View();
    }

    public ViewResult ServerError()
    {
        //500
        Response.StatusCode = (int)HttpStatusCode.NotFound;
        return View();
    }

}





handleerror