ASP.NET MVC入门 10、Action Filter与内置的Filter实现(实例-防盗链)

前一篇中我们已经了解了Action Filter与内置的Filter实现,现在我们就来 写一个实例。就写一个防盗链的Filter吧。

首先继承自FilterAttribute 类同时实现IActionFilter接口,代码如下:

/**//// <summary>/// 防盗链Filter./// </summary>public class AntiOutSiteLinkAttribute : ActionFilterAttribute, IActionFilter{    public AntiOutSiteLinkAttribute(FileType fileType)    {        this.FileType = fileType;    }    /**//// <summary>    /// 请求的文件类型.(文件或图片)    /// </summary>    public FileType FileType { get; set; }    IActionFilter 成员#region IActionFilter 成员    void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)    {        HttpContextBase httpContext = filterContext.HttpContext;        if (null != httpContext.Request.UrlReferrer)        {            string serverDomain = httpContext.Request.Url.Host;            string refDomain = httpContext.Request.UrlReferrer.Host;            if (GetRootDomain(refDomain).Equals(GetRootDomain(serverDomain), StringComparison.OrdinalIgnoreCase))            {                return;//如果根域名相同就返回            }        }        ContentResult cr = new ContentResult();        if (FileType == FileType.Image)        {            cr.ContentType = "image/jpeg";            FileInfo fi = new FileInfo(httpContext.Server.MapPath("~/Content/images/outsitelink.jpg"));            if (fi.Exists)            {                httpContext.Response.WriteFile(fi.FullName);            }            else            {                Bitmap bmp = new Bitmap(200, 50);                Graphics g = Graphics.FromImage(bmp);                g.FillRectangle(Brushes.White, 0, 0, 200, 50);                g.DrawString("请不要盗链", new Font("Arial", 15), Brushes.Red, new PointF(0, 0));                bmp.Save(httpContext.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);            }        }        else        {            cr.ContentType = "text/html";            cr.Content = string.Format("请不要盗链。返回<a href='{0}'>{1}</a>", Utils.AbsoluteWebRoot, BlogSettings.Instance.Name);        }        //将当前的上下文的ActionResult设置为我们的cr(ContentResult)        filterContext.Result = cr;    }    #endregion    /**//// <summary>    /// 获取网站的根域名    /// </summary>    /// <param name="domain">网站的域名,不带"Http://"</param>    /// <returns></returns>    private string GetRootDomain(string domain)    {        if (string.IsNullOrEmpty(domain))        {            throw new ArgumentNullException("参数'domain'不能为空");        }        string[] arr = domain.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);        if (arr.Length <= 2)        {            return domain;        }        else        {            return arr[arr.Length - 2] + "." + arr[arr.Length - 1];        }    }}public enum FileType{    File = 1,    Image}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, filter
, new
, httpcontext
, domain
, mvc 伪静态 防盗链
, asp.net图片防盗链
.net防盗链
,以便于您获取更多的相关知识。

时间: 2024-08-23 06:50:20

ASP.NET MVC入门 10、Action Filter与内置的Filter实现(实例-防盗链)的相关文章

ASP.NET MVC入门 9、Action Filter 与 内置的Filter实现(介绍)

有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支 持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的 Attributes,用来标记添加Action方法之前或者Action方法之后的行为到控制器 类中的Action方法中. 一些可能用到Action过滤器的地方有: 日 志,异常处理 身份验证和授权 - 限制用户的访问 输出缓存 - 保 存一个Action的结果 网络爬虫的过滤 本地化 动态Action - 将一个Action注

ASP.NET MVC 入门介绍 (上)

参考文章 ASP.NET MVC Overview. 1. MVC模式 MVC模式是一种软件架构模式.它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller).MVC模式最早由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,

一起谈.NET技术,ASP.NET MVC 入门介绍 (上)

参考文章 ASP.NET MVC Overview. 1. MVC模式 MVC模式是一种软件架构模式.它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller).MVC模式最早由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,

ASP.NET MVC 入门介绍 (下)

相关文章:ASP.NET MVC 入门介绍 (上) 接上文,我们来完善验证功能.在System.ComponentModel.DataAnnotations命名空间中,已经有了一些基本的属性类来实现验证功能,只要把这些属性加到Model的字段上就可以了.具体的属性类可以查MSDN, 下面给出一个例子: public class Movie{ [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]public int ID { get;

一起谈.NET技术,ASP.NET MVC 入门介绍 (下)

相关文章:ASP.NET MVC 入门介绍 (上) 接上文,我们来完善验证功能.在System.ComponentModel.DataAnnotations命名空间中,已经有了一些基本的属性类来实现验证功能,只要把这些属性加到Model的字段上就可以了.具体的属性类可以查MSDN, 下面给出一个例子: public class Movie{ [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]public int ID { get;

ASP.NET MVC入门 8、ModelState与数据验证

ViewData有一个ModelState的属性,这是一个类型为ModelStateDictionary的 ModelState类型的字典集合.在进行数据验证的时候这个属性是比较有用的.在 使用Html.ValidationMessage()的时候,就是从ViewData.ModelState中检测是否 有指定的KEY,如果存在,就提示错误信息.例如在前一篇文章ASP.NET MVC 入门 7.Hellper与数据的提交与绑定中使用到的UpdateModel方法: 我们在View中使用Html.

ASP.NET MVC入门1、简介

什么是MVC模式 MVC(Model-View-Controller,模型-视图 -控制器模式)用于表示一种软件架构模式.它把软件系统分为三个基本部 分:模型(Model),视图(View)和控制器(Controller). 那么MVC模 式和我们熟悉的WebForm模式有什么不同呢?他的各个部分又是怎样分工的呢? 我们先来看一下普通的WebForm模式下,我们请求一个例如 http://www.51mvc.com/blog/index.aspx的URL,那么我们的WebForm程序会到网 站根

返璞归真 asp.net mvc (3) - Controller/Action

原文:返璞归真 asp.net mvc (3) - Controller/Action[索引页][源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者:webabcd 介绍 asp.net mvc 之 Controller 和 Action Controller 类必须以字符串 "Controller" 做类名称的结尾,字符串 Controller 之前的字符串为 Controller 的名称,类中的方法名为 Action 的名称 Acti

Asp.net mvc 2 in action 笔记-1 概述、Model

受Rails成功的影响,很多的开发框架都加入了rails成功的MVC思想,如.net世界的Castle Subsonic等,微软发布的框架Asp.net MVC作为后来者,吸取了很多好的思想,而且作为微软的官方支持,代码开源,因此估计asp.net的Web开发世界这个会成为主流. 本系列是看的图书<Asp.net mvc 2 in action>的一个笔记整理 约定 ■ Content-类似CSS 和图片的静态文件 ■ Controllers-控制器类 ■ Models-模型类 ■ Scrip