ashx 文件怎么用

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

一、ashx文件的添加

打开你的ASP.NET web site;右击项目选择 “Add New Item...”;将显示一个“Add New Item”的对话框,选择“Generic Handler”。此时,你就会得到一个新的ashx文件。

 

二、ashx文件自动生成的代码

 

它定义了IHttpHandler接口的两部分。非常重要的一部分是ProcessRequest(),它将决定这个ashx文件是被请求还是被显示。你不能修改这个继承的接口或删除它的方法。

 
C# 代码    复制

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler 
{
  public void ProcessRequest (HttpContext context) 
  {
    context.Response.ContentType = "text/plain";
    context.Response.Write("Hello World");
  }

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

 

从以上代码我们可以发现,一般处理程序是一个实现了IHttpHandler接口的类,可以在服务器端执行,必然也可以从浏览器获得数据,也可以发给浏览器数据,那么上面的代码各自都代表什么呢?

 

ProcessRequest (HttpContext context):方法在程序被访问时调用,参数是请求上下文的对象,通过对象可以处理信息

context.Response.Write("Hello World"):是向浏览器输出方法,把数据从服务器发送到浏览器。

 

三、ashx文件相关知识说明


1、什么是HttpHandler

HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

 

2、IHttpHandler是什么

IHttpHandler定义了如果要实现一个HTTP请求的处理所必需实现的一些系统约定。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。

 

3、IHttpHandler如何处理HTTP请求

当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandler Factory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。

一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。

 

四、ashx文件的实例

 

前端页面

 
HTML 代码    复制

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ajax。aspx。cs" Inherits="About_ajax" %>

<!DOCTYPE>

<html>
<head runat="server">    
     <title>Jquery Ajax实例</title>  
       <script type="text/javascript">
        $(document).ready(function() {
            $("#dbtn").click(function() {
                $.ajax({  type: "POST",  //dataType:"Text",   url: "AjaxHandler。ashx",  data: { name: "admin", pass: "admin" },  beforeSend: function() { $("#ds").html("loading"); },  success: function(msg) { $("#ds").html("<p>" + msg + "</p>"); }  });
            });
            //
            $("#btn_cbfbh").click(function() {
                //var zbm = '111';
                //alert(zbm);
                $.ajax({  type: "POST",  //dataType:"Text",   url: "S_CBFBM。ashx",  data: { ZBM: "51011200100200" },  beforeSend: function() {  //$("#div_load").visible = true;  },  success: function(msg) {  //$("#div_load").visible = false;  $("#ds").html("<p>" + msg + "</p>");  $("#CBFBM").val(msg);  }  });
            });
            //
        });
        function js_function_get_cbfbm(p_zdm) {
            $.ajax({
                type: "POST",
                url: "S_CBFBM。ashx",
                data: { ZBM: p_zdm },
                beforeSend: function() {  //$("#div_load").visible = "true;  },
                success: function(msg) {  //$("#div_load").visible = false;  $("#ds").html("<p>" + msg + "</p>");  $("#CBFBM").val(msg);  }
            });
        };
    </script>
</head>
<body onload="javascript:{js_function_get_cbfbm('sfsfds');}">
    <form id="form1" runat="server">
    <div>
      <div id="ds"><p>我是AJAX原来的文字!</p></div>  
      <input type="button" value="提交AJAX测试" id="dbtn" name="dbtn" />  
      <br />
      <input type="text"  id="CBFBM" name="CBFBM"/>   
      <input type="button" value="获取成包方编号" id="btn_cbfbh" name="btn_cbfbh" /> 
      <br />
      <div id="div_load" ><p></p></div>     
    </div> 
    <script type="text/javascript">
          var zbm='';
          if(zbm=='') zbm='51011200100900';
          //js_function_get_cbfbm(zbm);
    </script> 
    </form>
</body>
</html>

 

后端类代码

 
C# 代码    复制

<%@ WebHandler Language="C#" Class="AjaxHandler" %>

using System;
using System.Web;

public class AjaxHandler : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        //context.Response.ContentType = "text/plain";
        //context.Response.Write("Hello World");
        context.Response.ContentType = "text/plain";

        //context.Response.Write("Hello World");  
        if (context.Request["name"].ToString() == "admin" &&
            context.Request["pass"].ToString() == "admin")
        {
            context.Response.Write("Y");
        }
        else
        {
            context.Response.Write("N");
        } 
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

    [System.Web.Services.WebMethod]
    public static string SayHello()
    {
        return "Hello Ajax! AjaxHandler。ashx";
    } 

}

 

 
C# 代码    复制
<%@ WebHandler Language="C#" Class="S_CBFBM" %>

using System;
using System.Web;

/// <summary>
/// 功能:获取 编号
/// </summary>
public class S_CBFBM : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) 
    {        
        context.Response.ContentType = "text/plain";
                  
        string zbm=context.Request["ZBM"].ToString();
        zbm=zbm.Trim();
        if(zbm!="") 
        {
            string cbfbm = zbm + "001";
            context.Response.Write(cbfbm);
        }
        else
        {
            context.Response.Write("");
        } 
    }
 
    public bool IsReusable 
    {
        get 
        {
            return false;
        }
    }

    [System.Web.Services.WebMethod]
    public static string SayHello()
    {
        return "Hello Ajax! S_CBFBM。ashx";
    } 

}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值