ASP.NET MVC制作404跳转实例(非302和200)

 更新时间:2017年04月06日 11:14:46   作者:流水自逍遥  
本篇文章主要介绍了ASP.NET MVC制作404跳转实例(非302和200) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

产生404的原因主要有以下:

    1.浏览器和爬虫:某些浏览器会请求网站的favicon.ico,而如果你的网站根目录下没有这个文件,那么浏览器会有一条404的log,同样搜索引擎会请求robots.txt。但这个影响不大。

    2.用户输入了错误URL:某些用户不小心在浏览器地址栏加了一个字符或者删除了一个字符,导致服务器找不到请求的路径。

    3.某些网站引用的地址过老:某个页面已经被删除,而其他网站依然引用,他人点击的时候服务器找不到请求的路径。

404与SEO:

本网站由于经过改版,所以有很多失效的链接,而我也提交了死链给百度,但过了半个月也不见百度删除那些失效的链接。后来我用站长工具查询那些链接的HTTP状态,发现竟然返回的是302,这就难怪了。

为了给用户友好的体验,我制作了404页面,并且在Application_Error中捕获404,然后Response.Redicet()到404页面。那时候因为不懂SEO,以为这就算做了404页面。结果发现,这样是做了一个302跳转,这样404的状态码就变成了302,而搜索引擎Spider请求的时候,返回的是302的话,它就会认为你这个网页是正常的!导致网站的失效链接一直不被搜索引擎删除,久而久之,网站的死链过得,就会得到搜索引擎的惩罚。所以,正确的404跳转应该是返回友好页面给用户的同时,返回404的HTTP状态码给Spider。

ASP.NET中404跳转的解决方案:

上一篇讲了ASP.NET中自定义错误页的三种方法,这里就不多说了!

使用的是第三种httpErrors也就是IIS错误页,原因如下:

  1. Application_Error:好像比较难做到404跳转的同时又返回404状态码,一般会返回302;
  2. customErrors:博主尝试使用的时候,失败了,学艺不精啊,哎;
  3. httpErrors:博主尝试使用的时候,碰巧解决了,所以就是它了;

下面就来讲具体如何操作! 

IIS错误页的使用又分三种情况:

1.返回静态文件  2.返回动态页面  3.302重定向。

其中3直接忽略。  

1.返回静态文件   

使用此方法,需要准备一个静态html页面,然后放在硬盘里,指定路径的时候须给出绝对路径。

web.config中的写法

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="D:\ErrorPage\404.html" responseMode="File" />
  </httpErrors>
</system.webServer>

prefixLanguageFilePath表示客户端语言的文件目录,path表示文件相对于客户端语言目录的路径,responseMode表示响应类型,这里是File(文件)

IIS中的操作

两者选其一即可

由于博主尝试使用文件的时候以失败告终,所以这里不多说,说多了都是泪!

 2.返回动态页面

web.config中的写法

</system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="/ErrorPage/NotFound" responseMode="ExecuteURL" />
  </httpErrors>
</system.webServer>

与上面不同的就是responseMode="ExecuteURL"。

IIS中的操作

两者选其一即可

博主最后选择的这种方法,但是这种方法有几个坑需要注意

1.不能指定网站相对目录下的静态HTML文件,比如404.html。

 2.指定的动态页面cshtm、aspx等,需指定响应码为404。

以上两种情况如果不注意,那么你的404返回的响应码不是404也不是302而是200。

因为这种方法是返回网站根目录下的一个网页来作为404页面,而静态页面只要能访问到,那肯定就是200了。动态cshtml或者aspx如果没指定响应码,那么返回200也不奇怪。

所以说具体做法如下(以ASP.NET MVC为例):

public class ErrorPageController : Controller
{
  public ActionResult NotFound()
  {
    Response.Status = "404 Not Found";
    Response.StatusCode = 404;
    return View();
  }
}  

建一个控制器ErrorPage,里面可以定义各种错误页面,这里只是404页面。

然后建一个NotFound视图,把404页面写漂亮一点。

OVER。

这个时候再去请求不存在的路径。

完美解决!

Demo下载地址:点击进入

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • asp.net与Discuz!NT整合集成实例教程

    asp.net与Discuz!NT整合集成实例教程

    由于项目需要一个论坛,本来有CS的,在.net下很出名的国外开源论坛。但为了适应国内的风气,最后选用在国内如日中天的Discuz!NT。将Discuz与asp.net开发的网站整合,有很多人已经完成了。
    2009-11-11
  • DataGridView展开与收缩功能实现

    DataGridView展开与收缩功能实现

    我们今天将要讲到DataGridView之行的展开与收缩,包括功能是如何实现的,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • ASP.Net的Application介绍

    ASP.Net的Application介绍

    注:这个事件,写不写On是一样的。如Application_End与Application_OnEnd是一样的
    2013-07-07
  • .Net语言Smobiler开发之如何仿微信朋友圈的消息样式

    .Net语言Smobiler开发之如何仿微信朋友圈的消息样式

    这篇文章主要介绍了.Net语言Smobiler开发平台如何仿微信朋友圈的消息样式?本文为大家揭晓答案
    2016-09-09
  • Javascript 直接调用服务器C#代码 ASP.NET Ajax实例

    Javascript 直接调用服务器C#代码 ASP.NET Ajax实例

    近来总有一些朋友会问到一些入门的问题,把这些问题整理一下,写出来。在以前的文章里,曾经利用纯JS编写过Ajax引擎,在真正开发的时候,大家都不喜欢以这种低效率的方式开发,利用MS Ajax的集成的引擎,可以简单不少工作。
    2010-03-03
  • .Net Core学习教程之在Mvc中简单的使用日志组件

    .Net Core学习教程之在Mvc中简单的使用日志组件

    这篇文章主要给大家介绍了关于.Net Core学习教程之在Mvc中简单使用日志组件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • asp.net AJAX注册类

    asp.net AJAX注册类

    单纯用JavaScript,不需要注册,但是就是用不了AJAX的某些机制。
    2010-02-02
  • NET NativeAOT 用法指南

    NET NativeAOT 用法指南

    NativeAOT 是 .NET 中一个非常棒和强大的工具,有了 NativeAOT,你可以以可预测的性能构建你的应用,同时节省资源(更低的内存占用和更小的二进制大小),本文介绍NET NativeAOT 指南,感兴趣的朋友一起看看吧
    2024-02-02
  • ASP.NET MVC使用RazorEngine解析模板生成静态页

    ASP.NET MVC使用RazorEngine解析模板生成静态页

    这篇文章主要介绍了ASP.NET MVC使用RazorEngine解析模板生成静态页的相关资料,需要的朋友可以参考下
    2016-05-05
  • asp.net 的错误处理机制讲解

    asp.net 的错误处理机制讲解

    asp.net 的错误处理机制讲解...
    2007-04-04

最新评论