• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2158
  • Last Modified:

Custom 404 .aspx Page Not Working

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"/>
 </customErrors>

Open in new window

0
fprickett
Asked:
fprickett
  • 4
  • 2
1 Solution
 
ppittleCommented:
fprickett,

You need to configure IIS Custom Errors for the Site/Virtual Directory.  See the attached screen shot.
deletemeIIS.JPG
0
 
ppittleCommented:
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.

PJ
0
 
fprickettAuthor Commented:
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..."


0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
ppittleCommented:
fprickett:,

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.
0
 
spprivateCommented:
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
customerror.doc
0
 
fprickettAuthor Commented:
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.  
0
 
ppittleCommented:
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.
0

Featured Post

Microsoft Certification Exam 74-409

VeeamĀ® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now