ashx 文件怎么用
ashx 文件怎么用一、ashx文件的添加
打开你的ASP.NET web site;右击项目选择 “Add New Item...”;将显示一个“Add New Item”的对话框,选择“Generic Handler”。此时,你就会得到一个新的ashx文件。
二、ashx文件自动生成的代码
它定义了IHttpHandler接口的两部分。非常重要的一部分是ProcessRequest(),它将决定这个ashx文件是被请求还是被显示。你不能修改这个继承的接口或删除它的方法。
<%@ 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文件的实例
前端页面
<%@ 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() {
//$("#li_load").visible = true;
},
success: function(msg) {
//$("#li_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() {
//$("#li_load").visible = "true;
},
success: function(msg) {
//$("#li_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">
<li>
<li id="ds"><p>我是AJAX原来的文字!</p></li>
<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 />
<li id="li_load" ><p></p></li>
</li>
<script type="text/javascript">
var zbm='';
if(zbm=='') zbm='51011200100900';
//js_function_get_cbfbm(zbm);
</script>
</form>
</body>
</html>
后端类代码:
<%@ WebHandler Language="C#" Class="AjaxHandler" %>
using System;
using System.Web;
public class AjaxHandler : IHttpHandler {
public void ProcessRequest (HttpContext context)