ASP.NET MVC 5-(HTTP त्रुटि 404.0-नहीं मिला) लंबे गैर-मौजूदा URL के साथ




asp.net-mvc http-status-code-404 (2)

मैंने वेब के लिए माइक्रोसॉफ्ट विज़ुअल स्टूडियो एक्सप्रेस 2013 में एक नई परियोजना बनाई। यह एक asp.net MVC 5 - .NET फ्रेमवर्क 4.5 परियोजना है।

मैं संभालना चाहता था (संसाधन नहीं पाया जा सकता है):

मैंने इसे नीचे दिए गए कोड का उपयोग करते हुए संभाल लिया था

अगर मैं कुछ (/ होम / किड्डीडे / डीडीआईजे) या (/ डीजेडीआईडी ​​/ डीजेआई / डीजेएस) की तरह काम करता हूं तो यह कोड काम करेगा, इससे मेरा कस्टम त्रुटि पृष्ठ प्रदर्शित होगा।

हालांकि, जब मैं कुछ (/ होम / केडीडीई / डीडीआईजी / डीएफडी / एसडीएफडीएस / डीएसएफ / डीएसएफडीएस / एफडी), या किसी भी लंबे गैर-मौजूदा यूआरएल की कोशिश करता हूं, तो यह मुझे यह दिखाएगा:

से कोड: http://www.codeproject.com/articles/635324/Another-set-of-ASP-NET-MVC-4-tips

टिप 16: त्रुटि स्क्रीन को कस्टमाइज़ करना

त्रुटि पृष्ठ / View/Shared/Error.cshtml में है

web.config

<system.web>
<customErrors mode="RemoteOnly" />
</system.web>

Global.asax

protected void Application_EndRequest(Object sender, EventArgs e)
{
    ErrorConfig.Handle(Context);
}

त्रुटि कॉन्फ़िगर क्लास

public class ErrorConfig
{
  public static void Handle(HttpContext context)
  {
    switch (context.Response.StatusCode)
    {
      //Not authorized
      case 401:
        Show(context, 401);
        break;

      //Not found
      case 404:
        Show(context, 404);
        break;
    }
  }

  static void Show(HttpContext context, Int32 code)
  {
    context.Response.Clear();

    var w = new HttpContextWrapper(context);
    var c = new ErrorController() as IController;
    var rd = new RouteData();

    rd.Values["controller"] = "Error";
    rd.Values["action"] = "Index";
    rd.Values["id"] = code.ToString();

    c.Execute(new RequestContext(w, rd));   
  }
}

ErrorController

internal class ErrorController : Controller
{
  [HttpGet]
  public ViewResult Index(Int32? id)
  {
    var statusCode = id.HasValue ? id.Value : 500;
    var error = new HandleErrorInfo(new Exception("An exception with error " + statusCode + " occurred!"), "Error", "Index");
    return View("Error", error);
  }
}

मैं ऊपर उल्लिखित वेबसाइट से कोड के इस अंतिम बिट Global.asax में नहीं जोड़ा गया था क्योंकि यह पहले से ही FilterConfig.cs में है

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
  filters.Add(new HandleErrorAttribute());
}

कोई भी इसे ठीक करने का तरीका जानता है?

अग्रिम में धन्यवाद।


हल किया। अपने गैर-मौजूद यूआरएल को अपने त्रुटि पेज पर इंगित करने के लिए, निम्नलिखित करें:

  • अपने RouteConfig.cs फ़ाइल के अंत में नीचे दिए गए कोड जोड़ें:

    public static void RegisterRoutes(RouteCollection routes)
    {
        // Default
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    
        // Add this code to handle non-existing urls
        routes.MapRoute(
            name: "404-PageNotFound",
            // This will handle any non-existing urls
            url: "{*url}",
            // "Shared" is the name of your error controller, and "Error" is the action/page
            // that handles all your custom errors
            defaults: new { controller = "Shared", action = "Error" }
        );
    }
  • अपने वेब .config फ़ाइल में नीचे कोड जोड़ें:

    <configuration>
        <system.webServer>
           <modules runAllManagedModulesForAllRequests="true"></modules>
        </system.webServer>
    
        <system.web>
           <httpRuntime relaxedUrlToFileSystemMapping="true" />
        </system.web>
    </configuration>

यह आपके गैर-मौजूदा यूआरएल जैसे कि (/ad/asd/sa/das/d/asd.asd.asd+dpwd'=12=2e-21) को आपके त्रुटि पृष्ठ पर इंगित करना चाहिए।


एक अन्य तरीका यह आपके web.config को system.web तत्व के अंदर जोड़ना होगा

<system.web>
<!-- ... -->

<!--Handle application exceptions-->
<customErrors mode="On">

  <!--Avoid YSOD on 404/403 errors like this because [HandleErrors] does not catch them-->
  <error statusCode="404" redirect="Error/Index" />
  <error statusCode="403" redirect="Error/Index" />
</customErrors>

</system.web>




asp.net-routing