asp.net-ashx实现图片防盗链的代码如何编写与优化

教程大全 2026-01-18 02:14:28 浏览

在ASP.NET中,利用ASHX技术实现图片防盗链是一种常见且有效的方法,ASHX文件是ASP.NET中的一个模块,可以处理HTTP请求,而不需要创建完整的ASP.NET页面,以下是如何在ASP.NET中使用ASHX实现图片防盗链的详细步骤和代码示例。

ASHX简介

ASHX文件是一种特殊的ASP.NET模块,可以用来处理HTTP请求,与ASPX页面不同,ASHX文件不依赖于ASP.NET页面框架,因此可以更灵活地处理各种HTTP请求。

实现图片防盗链的步骤

创建ASHX文件

在Visual Studio中创建一个新的ASHX文件,这可以通过右键点击项目文件夹,选择“添加” -> “新建项”,然后选择“ASHX文件”来完成。

配置Web.config

在Web.config文件中,确保部分中启用了 httpModules 和配置,以便使用ASHX。

编写ASHX代码

在ASHX文件中,编写代码以处理图片请求,并检查请求是否来自合法的域名。

using System;using System.IO;using System.Web;public class ImageHandler : IHttpHandler{public void ProcessRequest(HttpContext context){context.Response.ContentType = "image/jpeg";string imagepath = context.Request.QueryString["path"];if (string.IsNullOrEmpty(imagePath)){context.Response.statusCode = 404;return;}// 设置允许的域名列表string allowedDomains = "example.com, anotherdomain.com";string referrer = context.Request.SERVERVariables["HTTP_REFERER"];if (string.IsNullOrEmpty(referrer) || !allowedDomains.Contains(referrer)){context.Response.StatusCode = 403;return;}// 读取图片文件byte[] imageBytes = File.ReadAllBytes(imagePath);context.Response.OutputStream.Write(imageBytes, 0, imageBytes.Length);}public bool IsReusable{get { return false; }}}

使用ASHX文件

您可以通过在URL中指定图片路径来访问图片,

表格:代码解析

代码部分 功能描述
context.Response.ContentType = "image/jpeg"; 设置响应内容类型为JPEG图片
string imagePath = context.Request.QueryString["path"]; 从查询字符串中获取图片路径
string allowedDomains = "example.com, anotherdomain.com"; 定义允许访问图片的域名列表
string referrer = context.Request.ServerVariables["HTTP_REFERER"];
byte[] imageBytes = File.ReadAllBytes(imagePath); 读取图片文件到内存
context.Response.OutputStream.Write(imageBytes, 0, imageBytes.Length); 将图片数据写入响应输出

Q1: ASHX文件与ASPX页面的主要区别是什么?

A1: ASHX文件不依赖于ASP.NET页面框架,因此可以更灵活地处理HTTP请求,而不需要完整的页面结构,它主要用于处理特定类型的请求,如图片、文件下载等。

Q2: 如何测试图片防盗链功能?


asp.net(C#)图片随机验证码的代码!不要在网上抄的!要自己测试成功的!

优化ASP.NET图片防盗链Ashx实现方法

首先,新建文件 里面不用写代码, 如下: using System; using ; using ; using ; using ; using ; using ; using ; using ; using ; namespace CreateImage {///

/// CreateImage 的摘要说明。/// public class CreateImage : {protected void Page_Load(object sender, EventArgs e){string checkCode = CreateCode(4);//用于验证Session[CheckCode] = checkCode;CreateImages(checkCode);}/*产生验证码*/public string CreateCode(int codeLength){string so = 1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z;string[] strArr=(,);string code = ;Random rand=new Random();for (int i = 0; i < codeLength; i++){code+=strArr[(0, )];}return code;}/*产生验证图片*/public void CreateImages(string code){Bitmap image = new Bitmap(60, 20);Graphics g = (image);WebColorConverter ww=new WebColorConverter();((Color)(#FAE264));Random random = new Random();//画图片的背景噪音线for (int i = 0; i < 12; i++){int x1 = ();int x2 = ();int y1 = ();int y2 = ();(new Pen(), x1, y1, x2, y2);}Font font = new Font(Arial, 15, | ); brush = new (new Rectangle(0,0,,),,,1.2f,true);(code, font, brush, 0, 0);//画图片的前景噪音点for (int i = 0; i < 10; i++){int x = ();int y = ();(x, y, );}//画图片的边框线(new Pen(), 0, 0, - 1, - 1); ms = new ();(ms, );(); = image/Gif;(());();();}#region Web 窗体设计器生成的代码override protected void OnInit(EventArgs e){//// CODEGEN: 该调用是 Web 窗体设计器所必需的。//InitializeComponent();(e);}/// /// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。/// private void InitializeComponent(){ += new (_Load);}#endregion} } 之后只需要在调用的时候 填入就可以 例如:新建 <%@ Page language=c# Codebehind= AutoEventWireup=false Inherits=1 %>

ASP.NET中常用的优化性能方法都有哪些?

个人觉得优点是1.界面和逻辑分离2.编写调试简单,东西很易用。 网上找的观点以前的 Web 开发模型相比, 提供了数个重要的优点:增强的性能。 是在服务器上运行的编译好的公共语言运行库代码。 与被解释的前辈不同, 可利用早期绑定、实时编译、本机优化和盒外缓存服务。 这相当于在编写代码行之前便显著提高了性能。 世界级的工具支持。 框架补充了 Visual Studio 集成开发环境中的大量工具箱和设计器。 WYSIWYG 编辑、拖放服务器控件和自动部署只是这个强大的工具所提供功能中的少数几种。 威力和灵活性。 由于 基于公共语言运行库,因此 Web 应用程序开发人员可以利用整个平台的威力和灵活性。 框架类库、消息处理和数据访问解决方案都可从 Web 无缝访问。 也与语言无关,所以可以选择最适合应用程序的语言,或跨多种语言分割应用程序。 另外,公共语言运行库的交互性保证在迁移到 时保留基于 COM 的开发中的现有投资。 简易性。 使执行常见任务变得容易,从简单的窗体提交和客户端身份验证到部署和站点配置。 例如, 页框架使您可以生成将应用程序逻辑与表示代码清楚分开的用户界面,和在类似 Visual Basic 的简单窗体处理模型中处理事件。 另外,公共语言运行库利用托管代码服务(如自动引用计数和垃圾回收)简化了开发。 可管理性。 采用基于文本的分层配置系统,简化了将设置应用于服务器环境和 Web 应用程序。 由于配置信息是以纯文本形式存储的,因此可以在没有本地管理工具帮助的情况下应用新设置。 此零本地管理哲学也扩展到了 框架应用程序的部署。 只需将必要的文件复制到服务器,即可将 框架应用程序部署到服务器。 不需要重新启动服务器,即使是在部署或替换运行的编译代码时。 可缩放性和可用性。 在设计时考虑了可缩放性,增加了专门用于在聚集环境和多处理器环境中提高性能的功能。 另外,进程受到 运行库的密切监视和管理,以便当进程行为不正常(泄漏、死锁)时,可就地创建新进程,以帮助保持应用程序始终可用于处理请求。 自定义性和扩展性。 随附了一个设计周到的结构,它使开发人员可以在适当的级别插入代码。 实际上,可以用自己编写的自定义组件扩展或替换 运行库的任何子组件。 实现自定义身份验证或状态服务一直没有变得更容易。

asp.net和JQuery EasyUI DataGrid的数据交互问题

JQuery 与后台交付有get和post两种方法,我这里给你简介绍一下吧:

get方法:$(?userName=123,function(data){

//后台地址 userName参数 123参数值

//data是从后台返回来的数据

post方法:

$(,{userName:你好},function(data){

// //后台地址 userName参数 123参数值

//data是从后台返回来的数据

using System;using ;using SQLLibary;using ;using ;

public class index : IHttpHandler {

public void ProcessRequest (HttpContext context) {

= text/plain;

string type = [userName];

}public bool IsReusable {get {return false;}}

有什么不懂可以追问!有空就帮你解答!

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐