一般处理程序.ashx的应用

article/2025/9/25 12:26:34

利用“一般处理程序”。如果你实用的是vs2005你在添加新项中可以见到“一般处理程序”,它的后缀名为.ashx。它是什么?其实它和.aspx很类似。先问问.aspx是如何工作的?也许你知道,.aspx能处理来自外部传入的请求,然后它还能处理这个请求并生成一个html作为结果返回。这是典型的处理外部请求的方式。.aspx就是专门为处理“典型”的请求而出现的。那么如果我们现在需要一种又能处理外部请求又需要我们自定义的处理这个请求那又要怎么做呢?(也就是不实用“典型”的方式来处理)。.ashx就能帮你做到这一点。

如果返回的是非html内容,请用一般处理程序实现

一     文件下载

1   html代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>文件打开与保存</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <a  href="Default.aspx">打开文件</a>
    <a href="Download.ashx">保存文件</a>   
    </div>
    </form>
</body>
</html>
2    添加一个一般处理程序

<%@ WebHandler Language="C#" Class="Download" %>
using System;
using System.Web;
using System.IO;
public class Download : IHttpHandler {   
    public void ProcessRequest (HttpContext context) {
        //添加一个文件的数据类型
        context.Response.ContentType = "application/octet-stream";
        //将文件进行编码
        string encodeFileName = HttpUtility.UrlEncode("文件.htm");//需要把文件名UrlEncode,因为有中文存在
        //添加一个报文头
        context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", encodeFileName));
        //获得文件的文件名称
        string filepath = context.Server.MapPath("Default.aspx");
        //利用文件流保存
        context.Response.Write(File.ReadAllText(filepath));
       
        //添加一个文件的数据类型
        //context.Response.ContentType = "application/octet-stream";
        //将文件进行编码
        //string encodeFileName = HttpUtility.UrlEncode("文件.htm");
        //获得文件的文件名称
        //string filepath = context.Server.MapPath("Default.aspx");
        //添加一个报文头
        //context.Response.AddHeader("Content-Disposition","attachment;filename="+encodeFileName);
        //context.Response.AddHeader("Content-Length",encodeFileName.Length.ToString());
        //输入文件到文件流中
        //context.Response.WriteFile(filepath);     
        //context.Response.End();       
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}

3    运行效果如下:

单击“保存文件”时,出现以下对话框

2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客

 不再是普通是输出文件,而是弹出对话框,原因在于http报文头中添加了一个报文头,是下载,查看报文头,可以看到如下信息:

 

2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客

 如果是单击“打开文件”,则看到报文信息如下:

2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客

  以上比较说明http报文头对输出到客户端时的不同影响

 

二   EXCEL文件下载(注意添加对nopi dll文件的引用)

2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客

 

1   添加一个一般处理程序

<%@ WebHandler Language="C#" Class="DownExcel" %>
using System;
using System.Web;
public class DownExcel : IHttpHandler {   
    public void ProcessRequest (HttpContext context) {
        //指定输出类型
        context.Response.ContentType = "application/x-excel";
        //指定文件编码
        string filename = HttpUtility.UrlEncode("客户资料表.xls");
        //添加http报文头输出类型
        context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", filename));
       //创建excel文件表的标题
        NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
        NPOI.HSSF.UserModel.HSSFSheet sheet = workbook.CreateSheet();
        NPOI.HSSF.UserModel.HSSFRow row = sheet.CreateRow(0);
        NPOI.HSSF.UserModel.HSSFCell cell0 = row.CreateCell(0, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
        cell0.SetCellValue("客户名称");
        NPOI.HSSF.UserModel.HSSFCell cell1 = row.CreateCell(1, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
        cell1.SetCellValue("车辆类型");
        NPOI.HSSF.UserModel.HSSFCell cell2 = row.CreateCell(2, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
        cell2.SetCellValue("购买价格");
        //输出相关客户信息
        for (int x = 1; x < 8; x++)
        {
            NPOI.HSSF.UserModel.HSSFRow rowx = sheet.CreateRow(x);
            NPOI.HSSF.UserModel.HSSFCell c0 = rowx.CreateCell(0, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
            c0.SetCellValue("cust"+x.ToString());
            NPOI.HSSF.UserModel.HSSFCell c1 = rowx.CreateCell(1, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
            c1.SetCellValue(x.ToString() + x.ToString());
            NPOI.HSSF.UserModel.HSSFCell c2 = rowx.CreateCell(2, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
            c2.SetCellValue(x * 200);
        }
        //将文本流输出到客户端
        workbook.Write(context.Response.OutputStream);  
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}

 

2   html代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default5.aspx.cs" Inherits="Default5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>EXCEL文件下载示例</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <hr />
    <a   href="DownExcel.ashx">下载excel文件</a>
    <hr />
    </div>
    </form>
</body>
</html>
3   运行时效果:
2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客
 
2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客
 OK, 通过以上分析得知,服务器向客户机输出时excel文件并没有在服务器上,而是由一般处理程序动态产生的,利用文件流输出的
总结: 如果返非html的话,都写在一般处理程序中,而不是写在aspx文件中
三    利用aspx页面实现excel文件下载
1   UI设计如下;
2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客
 2   C#代码如下:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Default6 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
}
    protected void Button1_Click(object sender, EventArgs e)
    {
        //不推荐这个方法来实现下载
        Response.Clear();
       Response.ContentType = "application/x-excel";
        //指定文件编码
        string filename = HttpUtility.UrlEncode("客户资料表.xls");
        //添加http报文头输出类型
       Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", filename));
        //创建excel文件表的标题
        NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
        NPOI.HSSF.UserModel.HSSFSheet sheet = workbook.CreateSheet();
        NPOI.HSSF.UserModel.HSSFRow row = sheet.CreateRow(0);
        NPOI.HSSF.UserModel.HSSFCell cell0 = row.CreateCell(0, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
        cell0.SetCellValue("客户名称");
        NPOI.HSSF.UserModel.HSSFCell cell1 = row.CreateCell(1, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
        cell1.SetCellValue("车辆类型");
        NPOI.HSSF.UserModel.HSSFCell cell2 = row.CreateCell(2, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
        cell2.SetCellValue("购买价格");
        //输出相关客户信息
        for (int x = 1; x < 8; x++)
        {
            NPOI.HSSF.UserModel.HSSFRow rowx = sheet.CreateRow(x);
            NPOI.HSSF.UserModel.HSSFCell c0 = rowx.CreateCell(0, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
            c0.SetCellValue("cust" + x.ToString());
            NPOI.HSSF.UserModel.HSSFCell c1 = rowx.CreateCell(1, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
            c1.SetCellValue(x.ToString() + x.ToString());
            NPOI.HSSF.UserModel.HSSFCell c2 = rowx.CreateCell(2, NPOI.HSSF.UserModel.HSSFCell.CELL_TYPE_STRING);
            c2.SetCellValue(x * 200);
        }
        //将文本流输出到客户端
        workbook.Write(Response.OutputStream);
        Response.End();
    }
}
3   运行结果如下:
2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客
 
2010年12月6日    一般处理程序的应用 - ywjwest - ywjwest的博客
 结果与一般处理程序实现的结果是一样的,但是不推荐这种做法
总结: 如果返回的是非html内容,一定要用一般处理程序来实现
 
game over

http://chatgpt.dhexx.cn/article/rgGgFqHa.shtml

相关文章

ashx一般处理程序

.NET里面webform的后缀是aspx WCF和WebService的后缀是asmx 然后今天拿到一个客户端代码&#xff0c;调用服务端&#xff0c;服务端后缀是ashx瞬间傻蛋了&#xff0c;.NET我不知道的组件真多。 四个疑问&#xff1a; 1、什么时候用 2、优缺点 3、简单实现机制 4、简单DEM…

ashx和aspx的区别

ashx是什么文件? .ashx 文件用于写web handler的。.ashx文件与.aspx文件类似&#xff0c;可以通过它来调用HttpHandler类&#xff0c;它免去了普通.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。 .ashx文件适合产生供浏览器处理的、不需要回发处理的…

ashx 文件怎么用

本文导读&#xff1a;ashx是什么文件,如何创建 .ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。.ashx文件类似于.aspx文件&#xff0c;可以通过它来调用HttpHandler类&#xff0c;从而免去了普通.aspx页面的控件解析以及页面处理的过程。 一、ashx文件的添加 打…

mysql的数据库迁移到另一个机器上

1.先找到迁移服务器上的Data文件&#xff0c;我安装的是mysql5.7&#xff0c;默认安装的路径。那么就是在C:\ProgramData\MySQL文件里面&#xff0c;先把隐藏文件打开。 这个Data文件就是你的数据文件&#xff1b;将你要迁移的数据库文件放到这里如下&#xff1a; 然后打开my.i…

MySQL数据库迁移方案比较和使用

数据库迁移方案 数据迁移&#xff08;Data migration&#xff09;是指在存储类型、格式和计算机系统之间的数据转换。 1 常用的迁移方案介绍 ​ 项目使用的数据存储技术是MySQL&#xff0c;关于MySQL的迁移方案大致分为三类&#xff1a; 1.1 mysqldump命令 mysql提供了对数…

MySQL数据库迁移详细步骤(转)

一、背景简介 1、问题描述 由于机房搬迁&#xff0c;需要对后台DB服务器进行迁移&#xff0c;同时为了保证在数据迁移过程中&#xff0c;对线上业务不造成影响&#xff0c;并能够做到秒级切换。如果我们采用普通的逻辑备份&#xff0c;比如&#xff1a;mysqldump&#xff0c;会…

【转载】MySQL数据库迁移详细步骤

【转载】http://sofar.blog.51cto.com/353572/1598364 一、背景简介 1、问题描述 由于机房搬迁&#xff0c;需要对后台DB服务器进行迁移&#xff0c;同时为了保证在数据迁移过程中&#xff0c;对线上业务不造成影响&#xff0c;并能够做到秒级切换。如果我们采用普通的逻辑备…

MYSQL数据库迁移到ORACLE数据库

一、环境和需求 1、环境 Mysql数据库服务器&#xff1a; OS version&#xff1a;linux 5.3 for 64 bit Mysql Server version: 5.0.45 Oracle数据库服务器&#xff1a; OS version&#xff1a;linux 5.3 for 64 bit Oracle version&#xff1a;oracle 11g r2 2、需求 把mysq…

MySQL数据库迁移到ORACLE(持续更新)

1. 使用Oracle SQL Developer 官方 SQL Developer 23.1下载 选择Windows 64-bit with JDK 11 included安装 2.下载后解压&#xff0c;选择exe执行启动&#xff0c;启动后见图 3. 创建连接 默认支持创建Oracle连接&#xff08;见下图&#xff09;&#xff0c;第三方连接需导入…

Linux下MySQL数据库迁移

默认安装的MySQL数据库的数据库目录为&#xff1a;/var/lib/mysql&#xff0c;使用一段时间后发现硬盘空间已经不能满足我们的使用需求&#xff0c;所以需要迁移数据库到磁盘空间更大的目录下&#xff0c;具体过程如下&#xff1a; 1、备份数据库 虽然迁移理论上不会出现问题…

MySQL数据库迁移详细步骤

转载自&#xff1a;http://sofar.blog.51cto.com/353572/1598364 一、背景简介 1、问题描述 由于机房搬迁&#xff0c;需要对后台DB服务器进行迁移&#xff0c;同时为了保证在数据迁移过程中&#xff0c;对线上业务不造成影响&#xff0c;并能够做到秒级切换。如果我们采用普…

mysql数据库迁移到达梦数据库

说明:在windowns上安装达梦数据库&#xff0c;并从mysql5.7迁移到达梦数据库8&#xff0c;此处使用的是达梦数据库的试用版本&#xff0c;如果要安装标准版或者企业版&#xff0c;可以花钱购买。 下载安装包 从达梦官网下载安装包&#xff0c;下载地址&#xff1a;https://ww…

Mysql数据库迁移问题解决方案

目录 问题描述错误原因解决方案其他问题运行选项问题SQL代码问题旧数据库迁移新数据库问题 问题描述 使用 Navicat 导入之前转储好的 sql 文件&#xff0c;报错 错误原因 1、在信息日志当中往上翻&#xff0c;发现没有选择数据库&#xff0c;所以报错的原因就是没有提前创建…

【MySQL】如何把Windows上的MySQL数据库迁移到Linux服务器上

目录 1. 前言2. 物理备份与逻辑备份3. mysqldump实现逻辑备份4. 逻辑恢复 1. 前言 最近在学黑马的《瑞吉外卖》&#xff0c;前期的基础版本一致在 Windows 电脑上开发&#xff0c;包括 MySQL 数据库也是安装在 Windows 电脑上。最近才学到优化篇&#xff0c;安装了 Linux 虚拟…

MySQL数据库迁移(数据文件直接迁移)

MySQL数据库迁移 MySQL数据库迁移(数据文件直接迁移) 在今年10月下旬的时候&#xff0c;公司的服务器需要迁移&#xff0c;其中涉及到了MySQL数据库迁移。查看了一下MySQL数据文件的大小&#xff0c;接近60G的大小(实际数据并没用那么多)。由于服务器上业务需要&#xff0c;要尽…

mysql——数据库之间的迁移

今天继续给大家分享mysql数据库的知识 不同数据库之间的迁移 不同数据库之间迁移是指从其他类型的数据库迁移到MySQL数据库&#xff0c;或者从MySQL数据库迁移到其他类型的数据库。例如&#xff0c;某个网站原来使用Oracle数据库&#xff0c;因为运营成本太高等诸多原因&…

mysql数据库迁移方案

怎样用命令行把MySQL数据库迁移到另一台Linux服务器 1、用dump命令备份数据库。 #mysqldump-uroot-pdbfile>dbfile.sql 2、用rsync从新服务器获得备份的文件(SCP或WGET也可以)。 #rsync-avrrootmyolddbserver:/home/mydumpfolder/dbfile.sql 3、登陆新服务器的mysql客户端。…

mysql数据库数据迁移方法

说明&#xff1a;这里不讨论命令行还有通过navicat等工具的做法&#xff0c;这里只讨论在mysql坏掉&#xff08;不能启动&#xff09;的情况下&#xff0c;怎么办。 方法&#xff1a; a) 先来看mysql数据库文件的情况&#xff1a; mysql坏掉了&#xff0c;不管是linux还是wi…

MySQL数据库迁移(直接复制文件)

原地址&#xff1a;http://www.cnblogs.com/advocate/archive/2013/11/19/3431606.html MySQL数据库迁移(数据文件直接迁移) 在今年10月下旬的时候&#xff0c;公司的服务器需要迁移&#xff0c;其中涉及到了MySQL数据库迁移。查看了一下MySQL数据文件的大小&#xff0c;接近60…

MySQL数据库迁移方法

一、停止MySQL服务 此电脑右键 – 管理 – 服务&#xff0c;找到 MySQL 停止 二、修改路径 到C:\ProgramData\MySQL\MySQL Server x.x找到my.ini&#xff0c;打开它 第95行datadir改成目标路径&#xff0c;特别注意目标路径分隔符必须为 “\”&#xff0c;否则不成功&…