目前在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的情况下执行此操作?
答案 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
配置部分并依赖于更具编程性的方法,但从维护的角度来看,代码相当简单。