locked
404 in ASP.NET MVC how to solve it RRS feed

  • Question

  • User38624581 posted

    Is there any way to catch this type of request using a route or something else in the MVC framework itself?

    Thursday, May 10, 2018 5:37 PM

Answers

  • User-1134632663 posted
    protected void Application_Error(object sender, EventArgs e)
    {
       Exception exception = Server.GetLastError();
       // Log the exception.
    
       ILogger logger = Container.Resolve<ILogger>();
       logger.Error(exception);
    
       Response.Clear();
    
       HttpException httpException = exception as HttpException;
    
       RouteData routeData = new RouteData();
       routeData.Values.Add("controller", "Error");
    
       if (httpException == null)
       {
           routeData.Values.Add("action", "Index");
       }
       else //It's an Http Exception, Let's handle it.
       {
           switch (httpException.GetHttpCode())
           {
              case 404:
                  // Page not found.
                  routeData.Values.Add("action", "HttpError404");
                  break;
              case 500:
                  // Server error.
                  routeData.Values.Add("action", "HttpError500");
                  break;
    
               // Here you can handle Views to other error codes.
               // I choose a General error template  
               default:
                  routeData.Values.Add("action", "General");
                  break;
          }
      }           
    
      // Pass exception details to the target error View.
      routeData.Values.Add("error", exception);
    
      // Clear the error on server.
      Server.ClearError();
    
      // Avoid IIS7 getting in the middle
      Response.TrySkipIisCustomErrors = true; 
    
      // Call target Controller and pass the routeData.
      IController errorController = new ErrorController();
      errorController.Execute(new RequestContext(    
           new HttpContextWrapper(Context), routeData));
    }

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, May 10, 2018 5:39 PM

All replies

  • User-1134632663 posted
    protected void Application_Error(object sender, EventArgs e)
    {
       Exception exception = Server.GetLastError();
       // Log the exception.
    
       ILogger logger = Container.Resolve<ILogger>();
       logger.Error(exception);
    
       Response.Clear();
    
       HttpException httpException = exception as HttpException;
    
       RouteData routeData = new RouteData();
       routeData.Values.Add("controller", "Error");
    
       if (httpException == null)
       {
           routeData.Values.Add("action", "Index");
       }
       else //It's an Http Exception, Let's handle it.
       {
           switch (httpException.GetHttpCode())
           {
              case 404:
                  // Page not found.
                  routeData.Values.Add("action", "HttpError404");
                  break;
              case 500:
                  // Server error.
                  routeData.Values.Add("action", "HttpError500");
                  break;
    
               // Here you can handle Views to other error codes.
               // I choose a General error template  
               default:
                  routeData.Values.Add("action", "General");
                  break;
          }
      }           
    
      // Pass exception details to the target error View.
      routeData.Values.Add("error", exception);
    
      // Clear the error on server.
      Server.ClearError();
    
      // Avoid IIS7 getting in the middle
      Response.TrySkipIisCustomErrors = true; 
    
      // Call target Controller and pass the routeData.
      IController errorController = new ErrorController();
      errorController.Execute(new RequestContext(    
           new HttpContextWrapper(Context), routeData));
    }

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Thursday, May 10, 2018 5:39 PM
  • User475983607 posted

    Sachinsboa

    Is there any way to catch this type of request using a route or something else in the MVC framework itself?

    It is already caught and the reason MVC returns a 404.  Are you trying to return a custom error page?  

    http://benfoster.io/blog/aspnet-mvc-custom-error-pages

    https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-getting-started/deploying-web-site-projects/displaying-a-custom-error-page-cs

    Something else?

    Thursday, May 10, 2018 5:47 PM