【问题标题】:ASP.NET 404 httpmoduleASP.NET 404 http模块
【发布时间】:2012-02-07 00:08:28
【问题描述】:

我正在使用一个名为 EPiServer 的 CMS 产品。我们需要创建自己的显示 404 的方法,而使用 .NET 的标准 customErrors 是无法实现的。我们编写了一个用于检查HttpStatusCode 的模块。我们在 EndRequest 方法中执行此操作。

如果状态为 404,我们向 EPiServer 查询相应的 404 页面,然后将请求转移到该页面。但是,这不会返回 404,即使我执行以下操作,也不会返回正确的状态:

HttpContext.Current.Response.StatusCode = 404;
HttpContext.Current.Response.StatusDescription = "Page not Found";
HttpContext.Current.Server.TransferRequest(newPage);

同样,如果我执行 response.redirect 而不是 TransferRequest,则它不是正确的 404,因为 url 已经更改...

这样做的正确方法是什么?

提前致谢 阿尔

【问题讨论】:

标签: c# asp.net httpmodule episerver episerver-6-r2


【解决方案1】:

不是您问题的直接答案,但也可以看看这个开源 404 处理程序:https://www.coderesort.com/p/epicode/wiki/404Handler

它也可以在 episervers nuget feed 上使用

【讨论】:

    【解决方案2】:

    您使用的是哪个 IIS 版本?对于 IIS7 或 7.5,您可能需要这样的东西:

    <httpErrors errorMode="Custom">
            <remove statusCode="404" />
            <error statusCode="404" path="/somenotfoundpage.aspx" responseMode="ExecuteURL" />
            <remove statusCode="500" />
            <error statusCode="500" path="/someerrorpage.aspx" responseMode="ExecuteURL" />
    </httpErrors>
    

    【讨论】:

      【解决方案3】:

      您应该在用于 404 页面的模板的代码隐藏中设置状态代码。

      如果这是一个纯内容页面,要么创建一个新模板,要么在页面中添加一个状态代码属性,如果它不为 null 或为空,则在后面的代码中添加逻辑以发送适当的标题.

      【讨论】:

        【解决方案4】:

        尝试在您转移到的页面上设置状态代码 - 在您的错误页面模板中。我不确定是否需要单独的模块 - 您可以简单地处理 Global.asax.cs 中的 HttpApplication 的错误事件。

        【讨论】:

          【解决方案5】:

          感谢您的回复。

          我实际上是通过执行以下操作来完成这项工作的:

          在 EndRequest 事件处理程序中,我将请求转移到正确的 EPiServer 页面,并在调用中包含了一个查询字符串参数,即

          app.Context.Server.TransferRequest(pageUrl + "&internal=true");

          然后在 PostRequestHandlerExecute 事件中检查查询字符串参数,如果它存在,那只能是因为它是 404,所以我返回正确的状态:

          HttpContext.Current.Response.StatusCode = 404; HttpContext.Current.Response.StatusDescription = "页面未找到";

          像魅力一样工作。

          谢谢 喜气洋洋的

          【讨论】:

            猜你喜欢
            • 2013-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-08
            • 2020-07-06
            相关资源
            最近更新 更多