asp.net - कस्टम एएसपी.नेट एमवीसी 404 त्रुटि पृष्ठ के लिए रूटिंग




asp.net-mvc asp.net-mvc-routing (6)

आईआईएस त्रुटि पृष्ठों को बदलने के लिए web.config में इसे आज़माएं। यह मुझे लगता है कि यह सबसे अच्छा समाधान है, और यह भी सही स्थिति कोड भेजता है।

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <remove statusCode="500" subStatusCode="-1" />
    <error statusCode="404" path="Error404.html" responseMode="File" />
    <error statusCode="500" path="Error.html" responseMode="File" />
  </httpErrors>
</system.webServer>

टिपिला से अधिक जानकारी - कस्टम त्रुटि पेज एएसपी.नेट एमवीसी का प्रयोग करें

मैं एक कस्टम HTTP 404 त्रुटि पृष्ठ बनाने की कोशिश कर रहा हूं जब कोई ऐसे URL में टाइप करता है जो सामान्य "संसाधन नहीं मिला" एएसपी.NET त्रुटि प्रदर्शित करने के बजाय एएसपी.नेट एमवीसी में एक वैध कार्रवाई या नियंत्रक का आह्वान नहीं करता है।

मैं इसे संभालने के लिए web.config का उपयोग नहीं करना चाहता।

क्या कोई भी रूटिंग जादू है जो मैं किसी भी अवैध यूआरएल को पकड़ने के लिए कर सकता हूं?

अद्यतन: मैंने दिए गए उत्तर की कोशिश की, हालांकि मुझे अभी भी बदसूरत "संसाधन नहीं मिला" संदेश मिलता है।

एक और अपडेट: ठीक है, जाहिर है आरसी 1 में कुछ बदल गया। मैंने विशेष रूप से HttpException पर 404 को फँसाने का भी प्रयास किया है और यह अभी भी मुझे "संसाधन नहीं मिला" पृष्ठ देता है।

मैंने एमवीसी कोंट्रिब के संसाधन की सुविधा भी उपयोग की है और कुछ भी नहीं - एक ही समस्या है। कोई विचार?


इस समाधान को web.config फ़ाइल में बदलाव या सभी मार्गों को पकड़ने की आवश्यकता नहीं है।

सबसे पहले, इस तरह एक नियंत्रक बनाएँ;

public class ErrorController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Title = "Regular Error";
        return View();
    }

    public ActionResult NotFound404()
    {
        ViewBag.Title = "Error 404 - File not Found";
        return View("Index");
    }
}

फिर "दृश्य / त्रुटि / अनुक्रमणिका.cshtml" के अंतर्गत दृश्य बनाएं;

 @{
      Layout = "~/Views/Shared/_Layout.cshtml";
  }                     
  <p>We're sorry, page you're looking for is, sadly, not here.</p>

फिर नीचे दिए गए ग्लोबल असैक्स फ़ाइल में निम्न जोड़ें:

protected void Application_Error(object sender, EventArgs e)
{
        // Do whatever you want to do with the error

        //Show the custom error page...
        Server.ClearError(); 
        var routeData = new RouteData();
        routeData.Values["controller"] = "Error";

        if ((Context.Server.GetLastError() is HttpException) && ((Context.Server.GetLastError() as HttpException).GetHttpCode() != 404))
        {
            routeData.Values["action"] = "Index";
        }
        else
        {
            // Handle 404 error and response code
            Response.StatusCode = 404;
            routeData.Values["action"] = "NotFound404";
        } 
        Response.TrySkipIisCustomErrors = true; // If you are using IIS7, have this line
        IController errorsController = new ErrorController();
        HttpContextWrapper wrapper = new HttpContextWrapper(Context);
        var rc = new System.Web.Routing.RequestContext(wrapper, routeData);
        errorsController.Execute(rc);

        Response.End();
}

यदि आपको ऐसा करने के बाद भी कस्टम आईआईएस त्रुटि पृष्ठ मिलता है, तो सुनिश्चित करें कि वेब कॉन्फ़िगरेशन फ़ाइल में निम्न अनुभागों को टिप्पणी (या खाली) है:

<system.web>
   <customErrors mode="Off" />
</system.web>
<system.webServer>   
   <httpErrors>     
   </httpErrors>
</system.webServer>

मुझे त्रुटि त्रुटि नियंत्रक बनाने के द्वारा काम करने में मेरी त्रुटि है जो इस आलेख में विचार लौटाती है। मुझे ग्लोबल.एक्सएक्स में रूट में "कैच ऑल" भी जोड़ना पड़ा।

मैं नहीं देख सकता कि यह इन त्रुटि पृष्ठों में से किसी एक को कैसे प्राप्त करेगा यदि यह Web.config में नहीं है ..? मेरा Web.config निर्दिष्ट करना था:

customErrors mode="On" defaultRedirect="~/Error/Unknown"

और फिर मैंने यह भी जोड़ा:

error statusCode="404" redirect="~/Error/NotFound"

मुझे वही समस्या थी, आपको जो करना है वह है, अपने व्यूअर फ़ोल्डर में web.config फ़ाइल में customErrors विशेषता जोड़ने के बजाय, आपको इसे अपनी प्रोजेक्ट रूट फ़ोल्डर में web.config फ़ाइल में जोड़ना होगा


यदि आप एमवीसी 4 में काम करते हैं, तो आप this समाधान को देख सकते हैं, यह मेरे लिए काम करता है।

मेरे Global.asax निम्न Application_Error विधि जोड़ें:

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Server.ClearError();

    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "Error");
    routeData.Values.Add("action", "Index");
    routeData.Values.Add("exception", exception);

    if (exception.GetType() == typeof(HttpException))
    {
        routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
    }
    else
    {
        routeData.Values.Add("statusCode", 500);
    }

    IController controller = new ErrorController();
    controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
    Response.End();

नियंत्रक स्वयं वास्तव में सरल है:

public class ErrorController : Controller
{
    public ActionResult Index(int statusCode, Exception exception)
    {
        Response.StatusCode = statusCode;
        return View();
    }
}

GitHub पर Mvc4CustomErrorPage का पूर्ण स्रोत कोड देखें।


यहां सही उत्तर दिया गया है जो एकल स्थान पर त्रुटि पृष्ठ को पूरी तरह से अनुकूलित करने की अनुमति देता है। Web.config को संशोधित करने या अलग कोड बनाने की आवश्यकता नहीं है।

एमवीसी 5 में भी काम करता है।

इस कोड को नियंत्रक में जोड़ें:

        if (bad) {
            Response.Clear();
            Response.TrySkipIisCustomErrors = true;
            Response.Write(product + I(" Toodet pole"));
            Response.StatusCode = (int)HttpStatusCode.NotFound;
            //Response.ContentType = "text/html; charset=utf-8";
            Response.End();
            return null;
        }

http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages आधार पर





custom-error-pages