前一篇中我们已经了解了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 成员     /// <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
}

然后我们建立一个用于处理文件请求的Controller,并应用上我们刚才建立的Filter:


public class FilesController : BaseController
{
    [AntiOutSiteLink(FileType.Image)]
    public ActionResult Image(string file)
    {
        return Content("Image From 4mvc");
    }      [AntiOutSiteLink(FileType.File)]
    public ActionResult File(string file)
    {
        return Content("File From 4mvc");
    }

简单测试一下:

对于ActionFilter的应用是很广泛的,这需要你的灵活运用。对于其他应用,你可以参考我之前翻译的ASP.NET MVC Action Filter - 缓存与压缩 这一篇文章。

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

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

    于ASP.NET MVC Preview5. 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自Filt ...

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

    原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处 ...

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

    有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...

  4. ASP.NET MVC 入门系列教程

    ASP.NET MVC 入门系列教程 博客园ASP.NET MVC 技术专题 http://kb.cnblogs.com/zt/mvc/ 一个居于ASP.NET MVC Beta的系列入门文章,有朋友 ...

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

    原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/08/1305962.html ViewData有一个ModelState的属性,这是一个类型 ...

  6. ASP.NET MVC 入门

    ASP.NET MVC 入门 (Learning ASP.NET MVC) 传统的WebForm发展到如今出现不少的缺陷, 比如为了解决Http的无状态WebForm模式使用了ViewsState来保 ...

  7. 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

  8. ASP.NET MVC内置的Filter实现介绍

    有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...

  9. Asp.net MVC入门视频教程

    编程开发 > Asp.net视频教程 > Asp.net MVC入门视频教程 > 1.传统web处理方式和mvc处理方式 上传日期:2014-08-16 10:02:45  相关摘要 ...

随机推荐

  1. OpenSUSE共享网络

    因为想要使用Arduino Ethernet扩展版,想要搭建一个局域网供其使用有线,无奈路由器离我太远.遂有本文. 实验器材: 装有OpenSUSE.有线网卡.无线网卡的笔记本. 路由器一台. 实验步 ...

  2. Linux简介及Ubuntu安装

    Linux简介及Ubuntu安装 常见指令 系统管理命令 打包压缩相关命令 关机/重启机器 Linux管道 Linux软件包管理 vim使用 用户及用户组管理 文件权限管理 大牛笔记-www.weix ...

  3. 手动将MySQL服务安装到windows中

    我的系统是win7 x64,mysql版本5.6 (网上的老教程很多都没用了,版本太旧,这是我自己总结出来的方法) 下载zip包的mysql可以获得最新版本,还可以免安装,好处多多,但是要把mysql ...

  4. Oracle datafile特殊字符处理

    1.发现数据库的数据文件有特殊字符: 2.尝试在sqlplus下用将tablespace offline后修改 SQL> alter tablespace WST_DATA rename dat ...

  5. ctrl+c关闭多线程python程序

    项目中经常需要用到多线程,如果一个python程序用了多线程,当子线程没有结束时,用ctrl+c是关闭不了主线程的,这时候就只能用kill命令杀掉,这样会很麻烦. 所以探讨了下怎么ctrl+C关闭多线 ...

  6. uCOS-II任务的挂起和恢复

    函数描述 OSTaskSuspend() 功能描述:无条件挂起一个任务.调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身.函数原型:INT8U OSTaskSuspend ( ...

  7. 使用js为html元素动态添加class

    <ul id="root"> <li>1</li> <li>2</li> <li>3</li> ...

  8. 关于c++字符串的while(*temp++)

    首先,上一段代码 static bool reverse_str(const char *str) { const char *temp=str; while(*temp++); temp-=; // ...

  9. location.hash && location.href

    hash:设置或获取 href 属性中在井号“#”后面的分段. href:设置或获取整个URL为字符串. 通过下面的测试你会发现区别,将代码放到你的HTML中,然后用浏览器打开,测试步骤: 点击“超链 ...

  10. Oracle----Key Word

    desc|describe table_name DCL----column ----add -- add one column alter table product ); -- add multi ...