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

Display custom ASP.NET error page without rewriting URL

本文关键字:重写 URL 自定义 ASP NET 错误 显示      更新时间:2023-09-26

目前正在为我的网站在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

我期待像谷歌一样的东西:谷歌错误页面

有没有办法做到这一点没有Javascript?

这篇文章可能会对你有所帮助,下面是其中的一个片段:http://blog.dmbcllc.com/aspnet application_error -检测- 404 s/

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被请求,那么Response.Redirect不是你想要的,因为它返回到客户端发出第二个请求,从而改变URL。您希望保持在服务器上,因此适当的调用将是Server.Transfer。这个特定的事件处理程序进入到您的Global.asax.cs文件中,并且该方法将为与您的应用程序上下文中关联的任何404引发。

不幸的是,它将跳过您的customErrors配置部分并依赖于更程序化的方法,然而从维护的角度来看,代码相当简单。

你可以直接添加:redirectMode="ResponseRewrite"

这样的

<customErrors defaultRedirect="Error404.aspx" mode="RemoteOnly" 
                   redirectMode="ResponseRewrite"  >
        <error statusCode="404" redirect="Error404.aspx" />
    </customErrors>