我在DiscountASP.NET上托管我的网站。最近我的404错误处理问题一直存在,因为客户端没有被发送404状态代码,我无法弄清楚它为何突然启动。它曾经工作过。 我试着通过一个简单的例子来解决我的错误处理代码。我有两页,两者都存在:
404_start.aspx:此页面用于模拟不存在的页面。
<%@ Page Language="C#" Debug="True" Strict="True" %>
<script runat="server">
public void Page_Load()
{
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 404;
Response.Status = "404 Not Found";
Server.ClearError();
Server.Transfer("404_end.aspx");
}
</script>
<html>
<body>
Start
<br />Response.StatusCode: <%=Response.StatusCode%>
<br />Response.Status: <%=Response.Status%>
</body>
</html>
404_end.aspx:此页面用于模拟用户看到的错误消息。
<%@ Page Language="C#" Debug="True" Strict="True" %>
<html>
<body>
End
<br />Response.StatusCode: <%=Response.StatusCode%>
<br />Response.Status: <%=Response.Status%>
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158
</body>
</html>
因此,开始页面会重定向到结束页面,但404错误永远不会发生。 Fiddler说这是302,然后是200.但是404_end.aspx页面实际上是“Response.StatusCode:404”。 在本地,Fiddler根据需要看到404错误。 这可能是主持人的错吗?谢谢。
答案 0 :(得分:0)
是的可能。
如果fiddler返回错误代码,应用程序将选择相同的。
答案 1 :(得分:0)
我想我已经想通了。这是我的web.config文件的精简版本:
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="~/error/default.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/error/404.aspx" />
</customErrors>
</system.web>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="192\.168\." negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{PATH_INFO}" redirectType="SeeOther" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
似乎重写规则和customErrors正在进行交互。当我删除上面显示的重写规则(当用户请求http时强制https)时,服务器再次开始返回404错误。所以我用C#而不是web.config文件实现了http-&gt; https开关,一切似乎都很好用。由于http-&gt; https开关是在Web上执行的,因此问题并未在本地显现。问题显然不是DiscountASP.NET的错,虽然我没理由为什么我不能使用customErrors标签重写规则。