ASP.net的HTTP处理程序(ASHX)提取dll内嵌资源图片

在使用ASP.net构建应用程序的时候,我们有时候出于对版权保护的需要,需要将软件开发者的信息制作成一张图片,内嵌于dll程序集中,这样的话,我们在我们的应用程序显眼的位置,可以调用这张图片,以声明软件的制作者。

内嵌图片于dll中

1、新建一个类库,并将一张图片复制到工程中。

例子中,我们使用了我的文档中图片收藏的一张图片,命名为LOTUS.jpg

在解决方案资源管理器中,右击图片,选择属性,在属性面板中,我们将图片的生成操作属性改为嵌入的资源。

2,生成该程序集

引用类库,新建HTTP处理程序

1、我们在ASP.net工程中,添加引用,引用刚刚生成的dll程序集。

2、新建一个ASP.net HTTP处理程序,命名为Images.ashx,编写如下代码

<%@ WebHandler Language="VB" Class="images" %>

Imports System

Imports System.Web

Imports System.Reflection

Imports System.IO

Imports System.Drawing

Imports System.Drawing.Imaging

Public Class images : Implements IHttpHandler

   

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim dll As Assembly = Assembly.Load("ResuourceDemo")

        Dim jpg As Bitmap = New Bitmap(dll.GetManifestResourceStream("ResuourceDemo.LOTUS.jpg"))

        context.Response.Clear()

        context.Response.ContentType = "image/jpeg"

        Using ms As MemoryStream = New MemoryStream

            jpg.Save(ms, ImageFormat.Jpeg)

            ms.Flush()

            context.Response.BinaryWrite(ms.GetBuffer)

        End Using

        jpg.Dispose()

    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable

        Get

            Return False

        End Get

    End Property

End Class

  在ASP.net中,资源的名称是根据如下的约定确定的:Namespace.FIleName.Extension,标记对应于程序集默认的命名空间,而FileName和Extension标记对于被嵌入的文件名称和扩展名。对于例子中的图片,完整的名称就是ResuourceDemo.LOTUS.jpg。

  而在此之前,为了读取dll中的资源,我们必须使用System.Refiection命名空间中的Assembly类的两个方法,分别是GetMainfestResourceNames和GetManifestResourceStream。前者返回一个字符串数组,其中的每个元素代表一个被包含的资源名称(本例未用此方法),后者取这些资源名称之一为参数,并获取相应的嵌入资源流

        Dim dll As Assembly = Assembly.Load("ResuourceDemo")

        Dim jpg As Bitmap = New Bitmap(dll.GetManifestResourceStream("ResuourceDemo.LOTUS.jpg"))

  如上所示,在程序中的,我们使用Assembly类的Load方法,加载程序集ResuourceDemo.dll,再使用该类的GetManifestResourceStream方法引入程序集中图片的完整名称ResuourceDemo.LOTUS.jpg为参数,将程序集中的资源读取到Bitmap对象中。

  新建一个内存流,将图片对象读取到内存中,最后输出到客户端中。完成了图片的输出。

测试ASP.net HTTP处理程序

1、新建一个ASP.net窗体。添加Image控件,将设置Image控件的ImageUrl属性为Image.ashx

运行窗体

  后记,带ashx扩展名的资源,由一个名为SimpleHandleFactory的HTTP处理程序类进行处理。我们应该利用HTTP处理程序资源来实现应用程序的特有功能。它们需要比常规的Web页面被更快地处理。在任何情况下,HTTP处理程序返回一个带有内容类型和主体有效的HTTP响应。

  在JSP中,有过滤器的概念,可以过滤任何HTTP的请求,这里的.NET HTTP处理程序与之同理,更加有效的、典型的应用就是保护服务器上的资源不被非法盗链。这是一个非常实用的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值