我正在try 确定在标准ASP.NET Web应用程序中实现404页面的最佳方式.我目前在Global.asax文件的Application_Error事件中捕获了404个错误,并重定向到友好的404.aspx页面.问题是请求看到一个302重定向,后面跟着一个404页面丢失.有没有办法绕过重定向并用包含友好错误消息的立即404进行响应?

如果对不存在的页面的请求返回302后跟404,像谷歌机器人这样的网络爬虫会在意吗?

推荐答案

在全局处理这个问题.asax的OnError事件:

protected void Application_Error(object sender, EventArgs e){
  // An error has occured on a .Net page.
  var serverError = Server.GetLastError() as HttpException;

  if (serverError != null){
    if (serverError.GetHttpCode() == 404){
      Server.ClearError();
      Server.Transfer("/Errors/404.aspx");
    }
  }
}

在错误页面中,您应该确保正确设置了状态代码:

// If you're running under IIS 7 in Integrated mode set use this line to override
// IIS errors:
Response.TrySkipIisCustomErrors = true;

// Set status code and message; you could also use the HttpStatusCode enum:
// System.Net.HttpStatusCode.NotFound
Response.StatusCode = 404;
Response.StatusDescription = "Page not found";

您还可以很好地处理这里的各种其他错误代码.

谷歌通常会遵循302,然后遵循404状态代码-因此您需要确保在错误页面上返回该代码.

Asp.net相关问答推荐

无法在Microsoft Windows Server 2016(数据中心)上运行.NET可移植性分析器

Reaction-Native SignalR连接在调试模式下工作,在释放模式下失败

ASP.NET 核心中的 Request.CreateResponse

说服遗留应用程序 VB6 开发人员切换到 C#

是否可以访问位于另一个项目中的 MVC 视图?

在视图 Mvc.net 中访问路由值

如何解决 Kerberos 双跳问题?

我的 asp.net mvc Web 应用程序中的 OutputCache 设置.防止缓存的多种语法

修改 web.config 时如何防止 ASP.NET 应用程序重新启动?

发布网站项目时临时路径太长

MVC 4 - Razor - 将变量传递到 href url

Azure Functions 中的 DI

如何验证 WebClient 请求?

C# - 将图像输出到响应输出流给出 GDI+ 错误

使用 Web.Config 转换的高级任务

根据条件更改 GridView 行 colored颜色

在c#中显示带有换行符的标签文本

System.Linq.IQueryable 不包含Where的定义

无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port

如何识别字符串是否包含 unicode 字符?