Skip to main content

How to Setup Custom Umbraco Error Pages per HTTP Status Error Code (e.g: 400, 401, 403, 404, 500, etc.)

In order to create human friendly content editable custom error pages for an Umbraco project, below are the steps that you can follow;

  • In your web.config (system.webServer section), add the following setting to tell the site to pass all of the error handling through you application:
       <httpErrors existingResponse="PassThrough" />
  • Add the httpErrors - this is an IIS level setting rather than an ASP.NET setting, therefore, this needs to go into the system.webServer section in the web.config:
<system.webServer>

    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear/>
      <error
        statusCode="400"
        path="/error-pages/http-errors/400/"
        responseMode="ExecuteURL"/>
      <error
         statusCode="401"
         path="/error-pages/http-errors/401/"
         responseMode="ExecuteURL"/>
      <error
        statusCode="403"
        path="/error-pages/http-errors/403/"
        responseMode="ExecuteURL"/>
      <error
        statusCode="404"
        path="/error-pages/http-errors/404/"
        responseMode="ExecuteURL"/>
      <error
        statusCode="500"
        path="/error-pages/http-errors/500/"
        responseMode="ExecuteURL"/>
    </httpErrors>

</system.webServer>
  • Login to umbraco backoffice and create the error pages(if you have different paths than shown above, remember to update your paths - for my case under my home page, I have got an Error Page folder, and under it there is HTTP Errors node and then the error pages)
  • Go to your project's umbracoSettings.config file and add the default 404 page node id there too, by adding this; you make sure if any of the error page urls are wrong, then you return your 404 page.
   <content>
   ..
    <errors>
      <!--live & training-->
      <error404>64288</error404>
   ..
   </content>
  • Finally test that your custom error pages are returned correctly, you can throw exceptions for this.
     #region Http error code custom page tests

        [Route("BadRequestTest")]
        public ActionResult BadRequest()
        {
            throw new HttpException(400, "Bad request");
        }

        [Route("UnauthorizedTest")]
        public ActionResult Unauthorized()
        {
            // IIS returns 500 for status code 401 - Unauthrorized
            // https://stackoverflow.com/questions/43662305/net-core-returning-500-instead-of-401-when-missing-cookie
            throw new HttpException(401, "Unauthorized");
        }

        [Route("ForbiddenTest")]
        public ActionResult Forbidden()
        {
            throw new HttpException(403, "Forbidden");
        }

        [Route("NotFoundTest")]
        public ActionResult NotFound()
        {
            throw new HttpException(404, "Not found");
        }

        [Route("ServerErrorTest")]
        public ActionResult ServerError()
        {
            throw new HttpException(500, "Server error");
        }

        #endregion Http error code custom page tests
  • At this point, it is also good practice to return the correct http status codes for different error pages, for this you can add a new "http status code override" property to the error page's document type in Umbraco and based on the value of this setting, you can return the correct http status code(404, 403, 500 etc). This will hopefully help you and some useful resources can be found here, here and here.
@if (ViewBag.HttpStatusCodeOverrideSelectedValue!=null)
{
        this.Response.StatusCode = Convert.ToInt32(ViewBag.HttpStatusCodeOverrideSelectedValue);
        this.Response.TrySkipIisCustomErrors = true; // disable IIS custom errors
}



Comments

Popular posts from this blog

How to fix Git push error: "RPC failed; curl 56 HTTP/2 stream 7 was reset send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly"

Problem Today I saw the following problem when I tried to push my changes to a Git server after doing some work for upgrading an Umbraco v7 project to v8.18.8.  Possible reasons After some investigations, it seems like this could be because of the following reasons; Git is not happy with the amount of changes that are being pushed into the server.  There are possible limitations on the server about the size/amount of files that you can push. Your internet connection is not good and stable enough. Your Git client's version is old. Solution options For me, the easiest option was connecting to another Wifi and trying again. Apparently, this option helped quite a few people, so it is worth giving it a try. Unfortunately, it didn't work for me. A bad internet connection wasn't an option for me either, as my internet is pretty fast (500 Mbps). Similarly, my Git client version was the latest version (git version 2.41.0.windows.3).  On StackOverflow, there were a lot of recommend...

How to use JQuery Ajax Methods for Async ASP.NET MVC Action Methods

Making repeatedly calls to async methods can be a nightmare. In this case, it makes sense to use 2 ajax methods, instead of one. Here is a simple solution to overcome this problem. See that  ajaxcalls   is emptied after the success response for the first ajax call and then the second ajax method is used to make one single call to the async action method. Hope it helps. View: @section Scripts{     < script type ="text/javascript">         var smartDebitObject = new Object();         smartDebitObject.MembershipNumber = $( "#MembershipNumber" ).val();         smartDebitObject.ProfileId = $( "#ProfileId" ).val();         smartDebitObject.FirstName = $( "#FirstName" ).val();         smartDebitObject.LastName = $( "#LastName" ).val();     ...

How to fix "Microsoft SQL Error SQL71564: Error validating element [USERNAME]: The element [USERNAME] has been orphaned from its login and cannot be deployed."

I needed to export a database in BACPAC format today in order to restore it somewhere else, and I encountered the following error. To resolve this issue, I deleted all of the users mentioned in the error log. After successfully creating the BACPAC file, I used it to create a new database with no problems. Error: TITLE: Microsoft SQL Server Management Studio ------------------------------ One or more unsupported elements were found in the schema used as part of a data package. Error SQL71564: Error validating element [USER1]: The element [USER1] has been orphaned from its login and cannot be deployed. Error SQL71564: Error validating element [USER2]: The element [USER2] has been orphaned from its login and cannot be deployed. Error SQL71564: Error validating element [USER3]: The element [USER3] has been orphaned from its login and cannot be deployed. Error SQL71564: Error validating element [USER4]: The element [USER4] has been orphaned from its login and cannot be deployed. Error SQL71...