C# – Server.Transfer in Global.asax

asp.netcglobal-asaxnetserver.transfer

I have a custom error handler in the global.asax's Application_Error method, when an error occurs I use the following code to transfer user to the error page:

Server.Transfer("/Error/");

However without specifying the actual page name the code above breaks with "Error executing child request for /Error/" exception.

So if I use Server.Transfer("/Error/Default.aspx") it works fine with no problems.

Also using Response.Redirect("/Error/") works fine too, however we want to keep using Server.Transfer to retain URL displayed in the address bar when the error page is displayed so users can simply refresh the page to retry accessing the original offending URL.

Would be grateful if anyone can comment on how to get the Server.Transfer method working without specifying the actual aspx page name.

Many thanks.

Best Answer

Server.Transfer needs the actual, virtual path to a resource that will give the output needed. It does not go through IIS to find out what the website's default document(s) are, so it has no clue what you mean by "/Error/" unless that is an actual file name.

Response.Redirect works because that is sending a 'moved' result to the browser with that relative URL (/Error/) and when the browser makes the new request for /Error/, IIS handles it first, and applies the default document settings.

Related Topic