【问题标题】:Custom 404 page based on dynamic Url - Server.Transfer throwing error transferring to dynamic page基于动态 URL 的自定义 404 页面 - Server.Transfer 抛出错误转移到动态页面
【发布时间】:2013-07-25 12:00:51
【问题描述】:

我会捕获我网站上的所有错误,并根据某些信息生成电子邮件。我在Global.asaxApplication_Error 中执行此操作。我已经实现了一些代码来捕获404 错误,此时它将执行以下操作:

Server.ClearError();
string Redir = Settings["Custom404Page"];
Server.Transfer(Redir);

Redir 会像这样出现:PageContent/123/404_Not_Found.html 但是当我将它传递给 Server.Transfer 时,我得到一个错误:

Error executing child request for PageContent/123/404_Not_Found.html

我不想使用Response.Redirect,因为我需要确保404 的状态代码得到维护,而使用Response.Redirect 时似乎没有。

有没有人可以解决这个问题?我可以这样使用Server.Transfer吗?

【问题讨论】:

    标签: asp.net redirect http-status-code-404 response


    【解决方案1】:

    您不能将Server.Transfer 指向静态页面。您需要将其指向 .aspx 页面才能使其正常工作。

    如果你真的想使用 HTML 页面,你需要打开 HTML 文件,读取它的内容,缓存它并使用Response.Write 输出它,同时保留 404 响应头。

    见:http://support.microsoft.com/kb/320439

    Microsoft Internet 信息服务 (IIS) 分派 Server.Transfer 或 Server.Execute 请求到相应的 Internet 服务器应用程序编程接口 (ISAPI) 扩展 基于请求文件的扩展名。例如,一个请求 .aspx 页面被分派到 Aspnet_isapi.dll ISAPI 扩展名。

    在请求被分派到适当的 ISAPI 扩展后, ISAPI 扩展不能调用另一个 ISAPI 扩展。您收到 “症状”部分中列出的错误消息,因为 处理对 ASP.NET 页面的请求的 Aspnet_isapi.dll 文件不能 将请求转发到处理对​​ ASP 的请求的 Asp.dll 文件 页面。

    【讨论】:

    • 内容是数据库生成的(html只是我使用的扩展名)。你知道谷歌等是否会允许 302 进入我的自定义页面,然后在该页面上收听 404?我已经设法让它像那样工作,但我担心 404 之前的 302。
    • 我不会推荐它,很难说你是否会受到惩罚,所以如果可以的话最好避免它。如果内容是数据库生成的,能否从数据库中读取并使用Response.Write?或者只是将扩展名更改为.aspx
    • 我想要网站其余部分的包装器(如果有的话),以便用户可以单击任何正常链接。因此,只要它具有 .aspx 的扩展名,它就可以工作吗?会试一试的。
    • 具体一点:它需要一个与最初请求文件的扩展名相匹配的扩展名,因此 IIS 会将请求分派给正确的 ISAPI 处理程序。
    • 不幸的是,将扩展名更改为 .aspx 并没有帮助。看来我可能需要重新考虑我的计划了。
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2019-11-17
    • 2011-01-23
    • 2012-03-26
    相关资源
    最近更新 更多