Bob*_*non 79 c# asp.net master-pages custom-errors http-status-code-404
在尝试为Google网站站长工具设置我的网站后,我发现我的自定义ASP.NET 404页面未返回404状态代码.它显示了正确的自定义页面并告诉浏览器一切正常.这被认为是软404或假404.谷歌不喜欢这个.所以我发现了很多关于这个问题的文章,但我想要的解决方案似乎没有用.
我想要解决的解决方案是将以下两行添加到自定义404页面的Page_Load方法后面的代码中.
Response.Status = "404 Not Found";
Response.StatusCode = 404;
Run Code Online (Sandbox Code Playgroud)
这不起作用.页面仍然返回200 OK.然而,我发现如果我将以下代码硬编码到设计代码中,它将正常工作.
<asp:Content ID="ContentMain" ContentPlaceHolderID="ContentPlaceHolderMaster" runat="server">
<%
Response.Status = "404 Not Found";
Response.StatusCode = 404;
%>
... Much more code ...
</asp:content>
Run Code Online (Sandbox Code Playgroud)
该页面正在使用母版页.我正在我的web.config中配置自定义错误页面.我真的宁愿使用后面的代码选项但我似乎无法在设计/布局中放入黑客内联代码使其工作.
Rya*_*ook 72
解:
事实证明,问题在于使用母版页.我通过在页面生命周期中稍后设置状态代码来实现它,显然主页的呈现正在重置它,所以我覆盖了渲染方法并在渲染完成后设置它.
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.StatusCode = 404;
}
Run Code Online (Sandbox Code Playgroud)
可以做更多的工作来确定主页何时设置状态,但我会留给你.
原帖:
我能够让测试网络应用程序正常工作,它至少显示自定义错误页面并返回404状态代码.我不能告诉你你的应用程序有什么问题,但我可以告诉你我做了什么:
1)编辑web.config以获取自定义错误:
Run Code Online (Sandbox Code Playgroud)<customErrors mode="On"> <error statusCode="404" redirect="404.aspx"/> </customErrors>
2)添加了404.aspx页面并将状态代码设置为404.
Run Code Online (Sandbox Code Playgroud)public partial class _04 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.StatusCode = 404; } }
关于它,如果我去任何由Asp.Net处理的页面扩展并且不存在,我的提琴日志清楚地显示404,这里是标题:
Run Code Online (Sandbox Code Playgroud)HTTP/1.1 404 Not Found Server: Microsoft-IIS/5.1 Date: Sun, 07 Dec 2008 06:04:13 GMT X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 533
现在,如果我转到未由Asp.Net处理的页面(如htm文件),则不显示自定义页面,并显示IIS配置的404.
这是一篇文章,其中介绍了一些可能对您和您的问题有用的细节,我的测试确实重定向到新页面,因此所请求文件的URL几乎丢失(除了在查询字符串中) .
标题间谍响应:
HTTP/1.1 404 Not Found
Date: Sun, 07 Dec 2008 06:21:20 GMT
Run Code Online (Sandbox Code Playgroud)
gar*_*ary 27
我有一个类似的问题,我想将自定义页面显示为404(这是ASPX),它在localhost上工作正常,但只要远程访问者连接,他们就会得到通用的IIS 404.
对此的解决方案是添加
Response.TrySkipIisCustomErrors = true;
Run Code Online (Sandbox Code Playgroud)
在更改Response.StatusCode之前.
通过Rick Strahl找到http://www.west-wind.com/weblog/posts/745738.aspx
小智 12
IIS 7解决方案只是将其添加到您的web.config文件中:
<system.webServer>
<httpErrors existingResponse="Replace">
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="404.htm" responseMode="File" />
<error statusCode="500" prefixLanguageFilePath="" path="500.htm" responseMode="File" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
http://forums.asp.net/t/1563128.aspx/1
Jas*_*aat 10
尝试调用Response.End()跳过渲染...
Response.Status = "404 Not Found";
Response.StatusCode = 404;
Response.End();
return;
Run Code Online (Sandbox Code Playgroud)
经过大量测试和故障排除后,似乎某些托管服务提供商可能会干扰返回代码.我通过在内容中应用"黑客"来解决这个问题.
<%
// This code is required for host that do special 404 handling...
Response.Status = "404 Not Found";
Response.StatusCode = 404;
%>
Run Code Online (Sandbox Code Playgroud)
这将允许页面返回正确的返回代码,无论如何.