Одним из возможных решений является перенаправление с флагом, а затем создание RewritePath для BeginRequest.
Например, вы помещаете этот код в Global.asax
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.Request.RawUrl.EndsWith("error"))
{
HttpContext.Current.RewritePath("404CoolPage.aspx", false);
}
// .... rest code
}
и высделать перенаправление на вашем
void Application_Error(object sender, EventArgs e)
{
//... code
if(System.Web.HttpContext.Current.Request.QueryString.Count > 0)
Response.Redirect(HttpContext.Current.Request.RawUrl + "&error");
else
Response.Redirect(HttpContext.Current.Request.RawUrl + "?error");
}
Таким образом, вы делаете перенаправление и сохраняете URL как есть.
My Error Setup
Кстати,Я использую Server.Transfer и его работающий для меня.Это моя ошибка установки, и передача выполняется с помощью сервера, я не уверен, где ваша страница имеет проблемы с контекстом запроса
void Application_Error(object sender, EventArgs e)
{
// ... log the errors ...
string cTheFile = HttpContext.Current.Request.Path;
// in case the error is inside the 404CoolError.aspx
// I check for not calling my self and get a dead loop.
if(!cTheFile.EndsWith("404CoolError.aspx"))
Server.Transfer("~/404CoolError.aspx");
}
и на web.config
<customErrors redirectMode="ResponseRewrite" ... />