2

I've tried to search and found some solution on it. I tried it on but no luck. Most of the accepted solution is to configure your Web.config file I tried it but it still return the default error page

<configuration> <system.web> <customErrors mode="On"> <error statusCode="404" redirect="~/Error/Error404" /> </customErrors> </system.web> </configuration> 

any other way on how to configure it?

I don't want to configure it in IIS

    1 Answer 1

    2

    This solution doesn't need web.config file changes or catch-all routes.

    First, create a controller like this;

    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"); } } 

    Then create the view under "Views/Error/Index.cshtml" as;

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

    Then add the following in the Global asax file as below:

    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); } 

    If you still get the custom IIS error page after doing this, make sure the following sections are commented out(or empty) in the web config file:

     <system.web> <customErrors mode="Off" /> </system.web> <system.webServer> <httpErrors> </httpErrors> </system.webServer> 
    3
    • Hi! I tried what you suggest Its working but my problem now is the code in _Layout.cshtml has been put to <pre> </pre>
      – Yuu
      CommentedSep 6, 2016 at 5:24
    • Instead of the routeData you used I used Response.Redirect("~/Error/Index"); and its working. Thanks
      – Yuu
      CommentedSep 6, 2016 at 5:41
    • @FrostyPinky You're welcome, glad I was able to help:)CommentedSep 6, 2016 at 8:36

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.