Custom 404 .aspx Page Not Working

Posted on 2009-04-13
Medium Priority
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 asp.net 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 'http://xxx.xxx.xxx.xxx/Blah.htm'. Line 1, Position..."

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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.


Accepted Solution

ppittle earned 2000 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 asp.net 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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

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 …
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Use Wufoo, an online form creation tool, to make powerful forms. Learn how to choose which pages of your form are visible to your users based on their inputs. The page rules feature provides you with an opportunity to create if:then statements for y…
Learn how to set-up custom confirmation messages to users who complete your Wufoo form. Include inputs from fields in your form, webpage redirects, and more with Wufoo’s confirmation options.

650 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