【问题标题】:Handling 404's better in .NET在 .NET 中更好地处理 404
【发布时间】:2009-10-17 13:11:34
【问题描述】:

由于你们中的一些人正在运营一些相当大的网站,我想听听您对处理 404 的看法。我已经尝试过使用 .Net 进行大量不同的设置,但实际上永远无法让它做正确的事情。我似乎总是返回某种重定向或错误的标头,而不是 404。这是一个真正的痛苦,因为搜索引擎永远不会得到正确的反馈,并且尽管它们不再存在,但它们仍在访问这些页面。反过来,这意味着我会收到关于我知道不再存在的页面的错误报告。我也对 .Net 处理一些请求和 IIS 处理一些请求的方式感到非常困惑。

我目前的设置如下:IIS7,ASP.Net 3.5 App。我有 web.config 设置的自定义错误页面部分,以使用新的 redirectMode="ResponseRewrite" 属性处理 404,转发到 html 错误页面。 IIS 被配置为处理 404 并将它们转发到同一个 html 页面。 Elmah 也被配置为通过电子邮件报告任何此类问题。

现在,当我尝试以下地址 http://www.severnside.com/document.aspx(一个不存在的页面)时,.net 会处理错误并显示 200 响应。显然这应该是 404。当我尝试 http://www.severnside.com/document 时,我得到了正确的 404,但错误是由 IIS 处理的。是否可以让 .Net 也处理此错误,以便 Elmah 可以发现错误?

如果我能深入了解其他人用来正确处理这种情况的设置,那就太好了。

谢谢

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您可以使用动态页面来设置正确的状态代码,而不是使用静态 html 页面:

    404.aspx:

    <%@ Page Language="C#" %>
    <script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.StatusCode = 404;
    }
    </script>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        Not found
        </div>
        </form>
    </body>
    

    web.config:

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

    【讨论】:

    • 感谢您的反馈。在我的情况下,如果您想为 .NET 应用程序正确设置它,那么这把剑有两个方面。您需要一个 aspx 页面,其中设置了响应代码,例如您的示例代码,然后设置 IIS 以将任何 404 错误指向该文件。您还需要将自定义错误设置为指向同一个文件,尽管 .Net 本身实际上会返回 404 消息。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2018-10-26
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多