【问题标题】:Display custom ASP.NET error page without rewriting URL显示自定义 ASP.NET 错误页面而不重写 URL
【发布时间】:2013-04-09 21:45:34
【问题描述】:

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

【问题讨论】:

标签: javascript asp.net


【解决方案1】:

这篇文章可能会对您有所帮助,这里是其中的一个 sn-p: 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 配置部分并依赖于更加程序化的方法,但是从维护的角度来看代码相当简单。

【讨论】:

  • +1 好东西,很有用!这会维护错误的 URL,而不是将其更改为 /Error404.aspx 或诸如此类。但是,我正在使用 ASP.NET MVC 5Server.Transfer not 工作... Server.TransferRequest does 虽然工作,但只能调用一次(在上面的链接中,Server.Transfer 方法被调用了两次)。
  • 季节问候! System.Web.Routing 现在让这变得容易多了。显然,这是 MVC 的基础,因此您只需编写一个包罗万象的路线即可完成。您也可以在 WebForms 中使用路由。查看此链接:stackoverflow.com/questions/310580/…
  • 干杯@Scott!我实际上同时使用了这两种技术——同时使用Application_Error 和一条包罗万象的路线。事实上,我看到我的 Application_Error 方法在没有包罗万象的路线的情况下无法工作。使用两者的改进似乎是 URL 处于其“无效状态”。现在要弄清楚 Google 如何捕获和显示无效 URL...这里有一个链接:blog.dmbcllc.com/404-errors-retrieving-the-bad-url
  • 谢谢。 @斯科特。尽管就我而言,我需要将其重定向到 cshtml 页面。用过,this.server.TransferRequest。
【解决方案2】:

你可以添加:redirectMode="ResponseRewrite"

喜欢这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2013-08-13
    • 2020-01-21
    • 2016-08-18
    • 2013-09-12
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多