Custom 404 .aspx Page Not Working

Posted on 2009-04-13
Last Modified: 2012-05-06
I'm trying to implement a custom 404 error .aspx page (with master page).  I have customErrors turned on (see code).  When I run it locally and go to http://localhost:62534/blah (mode="On"), I get my custom error page.  After I publish to my site, if I go to /blah, I get a "The XML page cannot be displayed" error.  If I go to /blah.aspx, I get my custom error page.  If I got to /blah.htm, I get "The XML page cannot be displayed".  How do I get my custom page to load in these situations?  I'd be happy to redirect "The XML page cannot be displayed" errors to my custom page but need to know how.  Thanks
<customErrors mode="RemoteOnly">  <!-- Tried with "On" as well -->
      <error statusCode="404" redirect="~/CustomErrors/FileNotFound.aspx"/>

Open in new window

Question by:fprickett
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2

Expert Comment

ID: 24131549

You need to configure IIS Custom Errors for the Site/Virtual Directory.  See the attached screen shot.

Expert Comment

ID: 24131579
What's happening in your situation is you have .NET configured to handled 404 errors.  However, when a user requests a resource from your web server, IIS initially recieves the request.  It makes a decision on who should handle the request.  For static content (ie a directory listing such as /blah or a static page, /blah.html) it handles the request internally; meaning ASP.NET is never called.  In that situation, if IIS needs to return a status code 404, it'll first check the Custom Errors section for the Virtual Directory or Site, and it will return what ever is listed in that section.  However, in this case ASP.NET is never initialized; the request is never forwarded to the ASP.NET worker proces (aspnet_wp.exe) so you're web.config is never loaded, and ASP.NET doesn't return the error page specified in your web.config.  

When IIS receives a request for an ASP.NET resource, ie an aspx page, the request is forwarded to the ASP.NET worker process (aspnet_wp.exe), which spawns an instance of the .NET CLR and begins processing the request.  In the event that the resource doesn't exist, then ASP.NET checks the web.config to see if the customErrors tag is defined, and returns accordingly.

Thus, when you publish your site, it is imperitive that you configure BOTH and IIS CustomErrors.


Author Comment

ID: 24131628
Sorry, I meant to mention that.  I did configure IIS website (IIS -> Default Web Site -> Properties ->Custom Errors -> 404, 404;2, 404;3 -> File = physicalpathtoroot\CustomErrors\FileNotFound.aspx) to handle custom errors.  It even tries to read the FileNotFound.aspx as evidenced in the details of the "The XML page cannot be displayed" error:

"A name was started with an invalid character. Error processing resource ''. Line 1, Position..."

"<%@ Page Language="C#" MasterPageFile="~/master.Master" AutoEventWireup="true" CodeBehind="FileNotFound.aspx.cs" Inher..."

Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.


Accepted Solution

ppittle earned 500 total points
ID: 24131690

In IIS Custom Errors page, when you set the page, there is a drop down to set File or URL.  When you set File, IIS returns the page as markup.  This setting will return your aspx page as if it was an HTML page.  When it gets to your browser, your browser freaks out because it doesn't understand the tags.

Instead set the drop down to URL.  This will tell IIS to send a redirect to the client to the client requests the Error Page.  That way IIS will have ASP.NET rendering the aspx page before sending it to the client.
LVL 15

Expert Comment

ID: 24131868
Dont know if you did this part.In the website properties ASP.Net tab click edit configuration and then under customerror tab set it to ON and set the page name.
Check the document

Author Closing Comment

ID: 31569602
Thanks a lot ppittle.  Using the Absolute URL /CustomErrors/FileNotFound.aspx worked great.  Needed to parse out the RawURL (Request.RawUrl) in the Page_Load to get the requested page (couldn't use Request.QueryString["aspxerrorpath"]) but it's working great.  

Expert Comment

ID: 24132903
I'm glad that worked for you.  Having to parse out the Request.RawUrl or using Request.RefererURL is a pain, but that's the IIS architecture for you.  Hopefully they fixed it in IIS 7.0.

Featured Post

Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Obtaining data on ASP 8 41
Random port 80 connection refuse flapping 14 63
Diff of the day 2 40
I'm looking for a dynamic length jQuery/javascript currency editor mask? 2 62
Developer tools in browsers have been around for a while, yet they are still heavily underused by developers. Developers still fix html or CSS then refresh page to see effect, or they put alert or debugger in JavaScript and then try again and again …
Lync server 2013 or Skype for business Backup Service Error ID 4049 – After File Share Migration
This video teaches users how to migrate an existing Wordpress website to a new domain.
Use Wufoo, an online form creation tool, to make powerful forms. Learn how to selectively show certain fields based on user input using rules to gather relevant information and data from your forms. The rules feature provides you with an opportunity…

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question