一、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文件相关知识说明
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("" + msg + ""); }
});
});
//
$("#btn_cbfbh").click(function() {
//var zbm = '111';
//alert(zbm);
$.ajax({
type: "POST",
//dataType:"Text",
url: "S_CBFBM。ashx",
data: { ZBM: "200" },
beforeSend: function() {
//$("#div_load").visible = true;
},
success: function(msg) {
//$("#div_load").visible = false;
$("#ds").html("" + msg + "");
$("#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("" + msg + "");
$("#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='900';
//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) {
//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";
}
}
复制
<%@ WebHandler Language="C#" Class="S_CBFBM" %>
using System;
using System.Web;
///
/// 功能:获取 编号
///
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";
}
}
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201323.html原文链接:https://javaforall.net
