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

asp.net文件防盗链 阅读详情

 

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

    
#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
}

 

然后我们建立一个用于处理文件请求的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"
);
    }
} 

简单测试一下:

image

image

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

Asp.Net MVC 图片防盗链(v_1.1.0) 对于网站以图片为主的,图片防盗链就显的非常重要了,非本站的访问都应该拒绝图片的显示,要不你的图片就很有容易被别人盗取 立即下载

相关推荐

Asp.Net Core 通过中间件防止图片盗链的实例

本篇文章主要介绍了Asp.Net Core 通过中间件防止图片盗链的实例,具有一定的参考价值,有兴趣的可以了解一下。

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

本系列文章基于ASP.NET MVC Preview5. 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例。就写一个防盗链的Filter吧。 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: /**////<summary> ///防盗链Filter. ///&l...

diandi5157的博客 187

Qi标准下的充电协议及其记忆技巧

记忆无线充电协议中的。

m0_73991989的博客 1320

网站开发 ASP.NET MVC 防盗链图

有时候我们做网站,自己服务器上的图不想让别人拿来直接使用,那么我们就用到了防盗链 其实做防盗链其实并不是太难,只要我们了解了HttpHandler的作用原理,就可以很简单的做出来 创建ImageHandler.CS脚本,代码如下 然后配置我们web.config ,具体如下基本意思就是遇到这个后缀的文件我们用谁来处理 ...

qq_36819905的博客 406

TwinCAT3 主站动态配置 PDO 的实战技巧与性能优化

本文深入探讨了TwinCAT3主站动态配置PDO的实战技巧与性能优化策略。通过对比静态PDO的局限,阐述了动态配置在提升系统灵活性、降低网络负载和保障实时性方面的核心优势。文章提供了从环境准备、代码实现到错误排查的完整流程,并重点解析了PDO映射、SDO通道区别以及分布式时钟同步等关键概念,帮助工程师掌握EtherCAT网络性能调优的核心方法。

weixin_29213525的博客 346

知识图谱的数据挖掘与分析

1. 背景介绍 1.1 数据挖掘的崛起 随着互联网的普及和大数据技术的发展,数据挖掘已经成为了计算机科学领域的热门研究方向。数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,通过计算机科学、统计学、信息论等多学科交叉的方法,挖掘出有用信息和知识的过程。数据挖掘的目标是从数据中发现有

AI天才研究院 1600

陨石坑之webapi使用filter

首先为什么说这是一个坑,是因为我们在webapi中使用filter的时候也许会先百度一下,好吧,挖坑的来了,我看了好几篇文章写的是使用System.Web.Mvc.Filters.ActionFilterAttribute。 然后开始痛苦的调试,发现这个过滤器永远调不进来(windows azure mobile services除外)。then.... 还是Google吧 ! 痛...

weixin_30443731的博客 273

MatterPort3D 数据集下载

【代码】MatterPort3D 数据集下载。

qq_44106838的博客 6785

[ASP.NET MVC 小牛之路]11 - Filter

[ASP.NET MVC 小牛之路]11 - Filter Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑,以非常简单优美的方式实现横切关注点(Cross-cutting Concerns)。横切关注点是指横越应该程序的多个甚至所有模块的功能,经典的横切关注点有日志记录、缓存处理、异常处理和权限验证等。本文将分别介绍M

Litt_J的专栏 975

手把手教你学Simulink实例:基于Simulink的锂电池管理系统(BMS)仿真

是确保锂电池安全、高效运行的关键组件。BMS 主要功能包括监控电池的状态(如电压、电流、温度)、估算荷电状态(State of Charge, SOC)、健康状态(State of Health, SOH),以及实现电池均衡和保护机制等。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证锂电池管理系统的控制策略。常见的均衡方法包括被动均衡(通过电阻放电)和主动均衡(通过开关电容或变压器)。通过本教程,我们详细介绍了如何使用 Simulink 进行锂电池管理系统的仿真实例。

MHD0815的博客 539

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1004

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

前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例。就写一个防盗链的Filter吧。 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: ///<summary>///防盗链Filter.///</summary>publicclassAntiOutS...

dianjin3567的博客 162

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3317

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

本系列文章基于ASP.NET MVC Preview5. 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例。就写一个防盗链的Filter吧。 首先继承自FilterAttribute类同时实现IActionFilter接口,代码如下: /**////<summary>///防盗链Filter.///</summar...

weixin_30532973的博客 83

Google Earth Engine(GEE)—— 显示如何使用迁移的训练样本进行多年分类的脚本(sentinel-2影像为例)光谱差异()

HydroSHEDS 是一种地图产品,它以一致的格式为区域和全球范围的应用程序提供水文信息。它提供了一套不同比例的地理参考数据集(矢量和栅格),包括河流网络、流域边界、排水方向和流量累积。请注意,对于北纬 60 度以上的地区,HydroSHEDS 数据的质量明显较低,因为没有可用的基础 SRTM 高程数据,因此分辨率较低的 DEM(USGS 提供的 HYDRO1k)。该数据集基于 15 角秒(赤道约 500 米)分辨率栅格数据提供嵌套的分层分水岭多边形。光谱信息和之前不同的点:训练结果。

此星光明博客 967

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: ASP.NET MVC 入门 -- 9、Action Filter 与 内置的Filter实现(介绍)
下一篇: ASP.NET MVC 入门 -- 11、使用AJAX
DiscussQuestions
博客等级 码龄19年 28粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值