zoukankan      html  css  js  c++  java
  • 【技术随笔】ASHX Handler

    最近项目要退役 ASHX,但是我对其并不了解,于是简单看了一下是做什么的。

    什么是 ASHX 处理程序

    某些ASP.NET是动态的。它们使用 C# 代码或磁盘资源生成。这些文件不需要 Web 窗体。相反,ASHX 泛型处理程序是理想的。它可以从查询字符串返回图像、写入 XML 或任何其他数据。

    在框架中使用 ASHX ASP.NET目标

    我们在 URL 中使用 ASHX 文件,并动态返回内容。我们将使用查询字符串。最后的 URL 将看起来像这样。

    http://www.dotnetperls.com/?file=name

    入门

    创建 ASHX 文件

    打开ASP.NET网站。转到网站菜单并单击第一个菜单项,"添加新项目..."这将显示"添加新项目"对话框。

    选择"通用处理程序"项,你会得到一个新文件,其中有一些代码称为处理程序.ashx。

    自动生成代码

    它定义了 IHttpHandler 接口的两个部分。重要部分是 ProcessRequest(),每当请求 Handler.ashx 文件时,都会调用该请求。

    映射

    将较旧的 URL 或路径映射到新的 ASHX 文件。对于向后兼容性和搜索引擎优化,您可能希望新处理程序接管站点中的旧 URL。

    <system.web>
        <urlMappings enabled="true">
            <add url="~/Default.aspx" mappedUrl="~/Handler.ashx"/>
    </urlMappings>
    

    添加示例图像

    您可以对涉及图像的 ASHX 文件做什么。在磁盘或 Internet 上查找您最喜爱的图像,并将其添加到您的网站项目中。以我为例,我选择的图像是"Flower1.png"。

    修改处理程序.ashx

    处理程序有两个部分。在这里,我们修改进程请求方法。我们可以更改文件的内容类型和响应内容。使用图像 ContentType 和文件名修改 Handler.ashx 与以下内容类似。

    <%@ WebHandler Language="C#" Class="Handler" %>
    
    using System;
    using System.Web;
    
    public class Handler : IHttpHandler {
    
        public void ProcessRequest (HttpContext context) {
            // Comment out these lines first:
            // context.Response.ContentType = "text/plain";
            // context.Response.Write("Hello World");
    
            context.Response.ContentType = "image/png";
            context.Response.WriteFile("~/Flower1.png");
        }
    
        public bool IsReusable {
            get {
                return false;
            }
        }
    }
    

    测试处理程序

    在这里,我们在本地计算机上测试新的配置和 ASHX 文件。现在单击绿色箭头在开发服务器上运行您的网站。您应该在浏览器中看到图像。这是处理程序的结果。

    添加功能

    到目前为止,这里的例子相对来说毫无用处。它所做就是允许我们通过ASHX处理程序管道图像。您可以向 C# 语言的处理程序添加任何功能(日志记录代码或引用者逻辑)。

    此外,开发人员通常需要在请求上使用 QueryString 集合。您可以在处理程序中使用请求.查询字符串,就像在任何 ASPX Web 窗体页面上一样。代码是相同的。

    <%@ WebHandler Language="C#" Class="Handler" %>
    
    using System;
    using System.Web;
    
    public class Handler : IHttpHandler {
    
        public void ProcessRequest (HttpContext context) {
    
            HttpResponse r = context.Response;
            r.ContentType = "image/png";
            //
            // Write the requested image
            //
            string file = context.Request.QueryString["file"];
            if (file == "logo")
            {
                r.WriteFile("Logo1.png");
            }
            else
            {
                r.WriteFile("Flower1.png");
            }
        }
    
        public bool IsReusable {
            get {
                return false;
            }
        }
    }
    

    上述代码接收请求,然后根据 QueryString 集合值返回不同的文件。它将从两个查询字符串返回两个图像之一。将显示它返回的字符串。

    性能

    使用 ASHX 文件是否有任何性能优势或更改?这些文件不太复杂,它们不涉及尽可能多的事件。它们更精简,涉及的代码更少,这是一个优势。

    总结

    我们在一个用户网站中使用了 ASHX ASP.NET处理程序。这可以填补许多不同的重要网站功能。我们将 urlMappings 与自定义处理程序上的查询字符串相结合,以极大地简化和简化端到端网站代码。

    参考

    https://www.dotnetperls.com/ashx

  • 相关阅读:
    类型化dataset分页
    cp自动创建层级结构的例子
    You have tried to change the API from what has been previously approved.
    Mysql学习笔记
    cygwin设置NDK环境变量ANDROID_NDK_ROOT
    PowerDesigner学习笔记
    Spring Cloud Commons教程(三)忽略网络接口
    Spring Cloud Commons教程(二)Spring RestTemplate作为负载平衡器客户端
    Spring Cloud Commons教程(一)普通抽象
    Spring Cloud教程(十二)加密和解密
  • 原文地址:https://www.cnblogs.com/it-dennis/p/13832391.html
Copyright © 2011-2022 走看看