显示自定义ASP.NET错误页面而不重写URL

时间:2013-04-17 08:09:55

标签: javascript asp.net

目前在ASP.NET中处理我网站的错误页面。如果服务器无法找到请求的页面,我正在使用Web配置文件将用户重定向到错误页面。下面是我在配置文件中使用的customErrors标记:

<customErrors mode="On" defaultRedirect="~/ErrorPages/Error.aspx">
  <error statusCode="404" redirect="~/ErrorPages/Error.aspx"/>
</customErrors>

它目前正在运行但我的问题是我不希望用户在URL中看到我的错误页面,如下所示:

/MySite/ErrorPages/Error.aspx?aspxerrorpath=/MySite/ImaginaryPage.aspx

我期待像谷歌那样的东西: Google Error Page

有没有办法在没有Javascript的情况下执行此操作?

1 个答案:

答案 0 :(得分:3)

这篇文章可能会帮到你,这里有一个片段: http://blog.dmbcllc.com/aspnet-application_error-detecting-404s/

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    if (ex is HttpException)
    {
        if (((HttpException)(ex)).GetHttpCode() == 404)
            Server.Transfer("~/Error404.aspx");
    }
}

真正关键的一部分是,如果你想保持与请求的URL相同的URL,那么Response.Redirect不是你想要的,因为它回到客户端发出第二个请求,从而改变URL 。您希望保留在服务器上,以便适当的呼叫为Server.Transfer。此特定事件处理程序将进入您的Global.asax.cs文件,并且该方法将针对在您的应用程序上下文中关联的任何404进行处理。

不幸的是,它会跳过你的customErrors配置部分并依赖于更具编程性的方法,但从维护的角度来看,代码相当简单。