3

目前正在为我的网站在 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 的情况下做到这一点?

4

2 回答 2

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配置部分并依赖于更加程序化的方法,但是从维护的角度来看,代码相当简单。

于 2013-04-18T04:55:23.760 回答
0

你可以添加:redirectMode="ResponseRewrite"

像这样

<customErrors defaultRedirect="Error404.aspx" mode="RemoteOnly" 
                   redirectMode="ResponseRewrite"  >
        <error statusCode="404" redirect="Error404.aspx" />
    </customErrors>
于 2021-12-08T09:56:09.503 回答