新瓶旧酒ASP.NET AJAX(8) - 客户端脚本编程(Sys.Net命名空间下的WebRequestManager)

简介:
[索引页]
[源码下载]


新瓶旧酒ASP.NET AJAX(8) - 客户端脚本编程(Sys.Net命名空间下的WebRequestManager、WebRequest、WebRequestExecutor和XMLHttpExecutor)


作者: webabcd


介绍
学习一下Sys.Net命名空间下与web请求相关的类,WebRequestManager、WebRequest、WebRequestExecutor和XMLHttpExecutor


关键
1、Sys.Net.WebRequestManager Class
    ·add_completedRequest(handler); - 添加请求完成后的处理器
    ·remove_completedRequest(handler); - 移除请求完成后的处理器
    ·add_invokingRequest(handler); - 添加处理调用请求的处理器
    ·remove_invokingRequest(handler); - 移除处理调用请求的处理器
    ·defaultTimeout - 默认超时时间

2、Sys.Net.WebRequest Class
    ·add_completed(handler); - 添加请求完成后的处理器
    ·remove_completed(handler); - 移除请求完成后的处理器
    ·invoke(); - 执行请求
    ·getResolvedUrl(); - 转换为可用url
    ·body - HTTP的Body内容
    ·executor - 与当前WebRequest对象相关的executor
    ·headers - HTTP的头信息
    ·httpVerb - HTTP请求方式“GET”或“POST”
    ·timeout - 请求超时时间
    ·url - 请求的url
    ·userContext - 用户上下文

3、Sys.Net.WebRequestExecutor Class
    ·abort(); - 终止请求
    ·executeRequest(); - 执行请求
    ·getAllResponseHeaders(); - 获得全部头信息
    ·getResponseHeader(key); - 获得指定头信息
    ·aborted - 请求是否被终止
    ·responseAvailable - 请求是否成功完成
    ·responseData - 响应当前请求的Body文本
    ·started - 是否已经开始处理请求
    ·statusCode - 状态代码
    ·statusText - 状态信息
    ·timedOut - 请求是否超时
    ·xml - 响应当前请求的XMLDOM对象
    ·webRequest - 获得与当前executor相关的WebRequest对象

4、Sys.Net.XMLHttpExecutor Class
    ·abort(); - 终止请求
    ·executeRequest(); - 执行请求
    ·getAllResponseHeaders(); - 获得全部头信息
    ·getResponseHeader(key); - 获得指定头信息
    ·aborted - 请求是否被终止
    ·responseAvailable - 请求是否成功完成
    ·responseData - 响应当前请求的Body文本
    ·started - 是否已经开始处理请求
    ·statusCode - 状态代码
    ·statusText - 状态信息
    ·timedOut - 请求是否超时
    ·xml - 响应当前请求的XMLDOM对象


示例
GetTarget.xml
<? xml  version ="1.0"  encoding ="utf-8"  ?> 
< root > 
     < employee > 
         < name >webabcd </ name > 
         < age >27 </ age > 
     </ employee > 
     < employee > 
         < name >ge </ name > 
         < age >26 </ age > 
     </ employee > 
</ root >
 
 
PostTarget.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PostTarget.aspx.cs" Inherits="ClientScripting_SysNet_PostTarget" %> 

<!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>Post Target测试页</title> 

        <script language="C#" runat="server"> 
                 
                protected void Page_Load(object sender, EventArgs e) 
                { 
                        Context.Response.Cache.SetNoStore(); 

                        System.Threading.Thread.Sleep(new Random().Next(0, 1000)); 

                        if (HttpContext.Current.Request.Form["Message"] != null) 
                        { 
                                Label1.Text = HttpContext.Current.Request.Form["Message"]; 
                        } 
                } 
                 
        </script> 

</head> 
<body> 
        <form id="form1" runat="server"> 
                <div> 
                        <h1> 
                                <%= DateTime.Now.ToString() %> 
                        </h1> 
                        <p> 
                                <asp:TextBox ID="Label1" Text="test" runat="server" /> 
                        </p> 
                </div> 
        </form> 
</body> 
</html>
 
 
WebRequestAndWebRequestExecutor.js
var getPage; 
var postPage; 
var displayElement; 

function pageLoad() 

        getPage =  "GetTarget.xml"
        postPage =  "PostTarget.aspx"
        displayElement = $get( "resultId"); 


function GetWebRequest() 

         // 创建WebRequest对象 
         var wRequest =     new Sys.Net.WebRequest(); 
         
         // url - 请求的url    
        wRequest.set_url(getPage); 
         
         // getResolvedUrl() - 转换为可用url 
        alert(wRequest.getResolvedUrl()); 
         
         // httpVerb - HTTP请求方式“GET”或“POST” 
        wRequest.set_httpVerb( "GET"); 
                     
         // userContext - 用户上下文 
        wRequest.set_userContext( "webabcd"); 
                         
        wRequest.add_completed(OnWebRequestCompleted); 
         
        displayElement.innerHTML = ""; 
                                
         // invoke() - 执行请求 
        wRequest.invoke(); 


function PostWebRequest() 

         // 创建WebRequest对象 
         var wRequest =     new Sys.Net.WebRequest(); 
         
         // url - 请求的url    
        wRequest.set_url(postPage); 
         
         // timeout - 超时时间 
        wRequest.set_timeout(500); 
         
         var body =  "Message=信息信息信息信息信息信息信息信息信息信息信息信息信息信息信息" 
         // body - HTTP的Body内容 
        wRequest.set_body(body); 

         // headers - HTTP的头信息 
        wRequest.get_headers()[ "Content-Length"] = body.length; 
                         
        wRequest.add_completed(OnWebRequestCompleted); 

        displayElement.innerHTML = ""; 
                                
         // invoke() - 执行请求 
        wRequest.invoke();     


// executor - WebRequestExecutor对象 
function OnWebRequestCompleted(executor, e)    
{                 
         // responseAvailable - 请求是否成功完成 
         if(executor.get_responseAvailable())    
        { 
                displayElement.innerHTML = ""; 
        
                 // 显示Web Request的用户上下文 
                 // webRequest - 获得与当前executor相关的WebRequest对象 
                 // userContext - 用户上下文 
                displayElement.innerHTML +=  "User Context:" + executor.get_webRequest().get_userContext(); 
                displayElement.innerHTML +=  "<br /><br />"
        
                 // 显示Web Request的状态             
                 // statusCode - 状态代码 
                 // statusText - 状态信息 
                displayElement.innerHTML +=  "Status Code:" + executor.get_statusCode(); 
                displayElement.innerHTML +=  "Status Text:" + executor.get_statusText(); 
                displayElement.innerHTML +=  "<br /><br />"
     
                 // 显示Web Request的所有Header                     
                 // getAllResponseHeaders() - 获得全部头信息 
                displayElement.innerHTML +=  "Headers:" + executor.getAllResponseHeaders(); 
                displayElement.innerHTML +=  "<br /><br />"
                 
                 // 显示Web Request的指定Header 
                 // getResponseHeader() - 获得指定头信息 
                displayElement.innerHTML += executor.getResponseHeader( "Content-Type"); 
                displayElement.innerHTML +=  "<br /><br />"
                 
                 // 显示Web Request的Body                                    
                displayElement.innerHTML +=  "Body:"
                 if (document.all) 
                { 
                         // responseData - 响应当前请求的Body文本 
                        displayElement.innerText +=  "\r\n" + executor.get_responseData(); 
                } 
                 else 
                { 
                         // Firefox 
                        displayElement.textContent +=  "\r\n" + executor.get_responseData(); 
                } 
                displayElement.innerHTML +=  "<br /><br />"
                 
                 // 显示XML数据 
                displayElement.innerHTML +=  "XML:"
                 if (document.all) 
                { 
                         // xml - 响应当前请求的XMLDOM对象 
                        displayElement.innerText +=  "\r\n" + executor.get_xml().xml; 
                } 
                 else 
                { 
                         // Firefox 
                        displayElement.textContent +=  "\r\n" +  "首节点:" + executor.get_xml().documentElement.nodeName; 
                } 
        } 
         else 
        { 
                 // timedOut - 请求是否超时 
                 if (executor.get_timedOut()) 
                { 
                        alert( "超时"); 
                } 
                 // aborted - 请求是否被终止 
                 else  if (executor.get_aborted()) 
                { 
                        alert( "请求被终止"); 
                } 
        } 


// 通知ScriptManager这段脚本已经加载完毕     
if ( typeof(Sys) !==  "undefined") Sys.Application.notifyScriptLoaded();
 
 
WebRequestAndWebRequestExecutor.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="WebRequestAndWebRequestExecutor.aspx.cs" 
        Inherits="ClientScripting_SysNet_WebRequestAndWebRequestExecutor" Title="WebRequest和WebRequestExecutor" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="Server"> 
                <Scripts> 
                        <asp:ScriptReference Path="~/ClientScripting/SysNet/WebRequestAndWebRequestExecutor.js" /> 
                </Scripts> 
        </asp:ScriptManagerProxy> 
        <p> 
                <input type="button" id="btnGetWebRequest" value="GetWebRequest" /> 
        </p> 
        <p> 
                <input type="button" id="btnPostWebRequest" value="PostWebRequest" /> 
        </p> 
        <hr /> 
        <div id="resultId" style="background-color: Aqua;"> 
        </div> 
</asp:Content>
 
 
运行结果
1、单击“GetWebRequest”按钮
弹出框,信息:当前的URL
显示与“GetTarget.xml”相关的结果

2、单击“PostWebRequest”按钮
可能提示超时,也可能显示与“PostTarget.aspx”相关的结果


WebRequestManagerAndXMLHttpExecutor.js
var displayElement; 

function pageLoad() 

        displayElement = $get( "ResultId"); 
         
         // defaultTimeout - 默认超时时间 
        Sys.Net.WebRequestManager.set_defaultTimeout(500); 
         
        Sys.Net.WebRequestManager.add_completedRequest(OnWebRequestCompleted); 
                 
        Sys.Net.WebRequestManager.add_invokingRequest 
        ( 
                 function (executor, e) 
                { 
                        alert('调用请求前'); 
                } 
        ); 


function GetData() 

         // 创建WebRequest对象 
        wRequest =     new Sys.Net.WebRequest(); 

         // url - 请求的url    
        wRequest.set_url( "PostTarget.aspx"); 
             
         if (document.all) 
        { 
                displayElement.innerText = ""; 
        } 
         else 
        { 
                 // Firefox    
                displayElement.textContent = ""; 
        } 
        
         // invoke() - 执行请求 
        wRequest.invoke(); 
         
         if ( new Date().getSeconds() % 2 == 0) 
        { 
                 // executor - 与当前WebRequest对象相关的executor 
                 var executor = wRequest.get_executor(); 
            
                 // abort() - 终止请求 
                executor.abort(); 
                 
                 // aborted - 与当前executor相关的请求是否被终止 
                alert('请求是否被终止:' + executor.get_aborted()); 
        } 


// executor - WebRequestExecutor对象 
function OnWebRequestCompleted(executor, e)    
{                 
         // responseAvailable - 请求是否成功完成 
         if(executor.get_responseAvailable())    
        { 
                  // 显示Web Request的Body                                    
                displayElement.innerHTML +=  "Body:"
                 if (document.all) 
                { 
                         // responseData - 响应当前请求的Body文本 
                        displayElement.innerText +=  "\r\n" + executor.get_responseData(); 
                } 
                 else 
                { 
                         // Firefox 
                        displayElement.textContent +=  "\r\n" + executor.get_responseData(); 
                } 
                displayElement.innerHTML +=  "<br /><br />"
        } 
         else 
        { 
                 // timedOut - 请求是否超时 
                 if (executor.get_timedOut()) 
                { 
                        alert( "超时"); 
                } 
                 // aborted - 请求是否被终止 
                 else  if (executor.get_aborted()) 
                { 
                        alert( "请求被终止"); 
                } 
        } 


function ExecuteRequest() 
{         
         // 创建WebRequest对象 
         var wRequest =     new Sys.Net.WebRequest(); 
         
         // url - 请求的url    
        wRequest.set_url( "GetTarget.xml"); 
         
         // 创建XMLHttpExecutor对象 
         var executor =  new Sys.Net.XMLHttpExecutor(); 
        
         // executor - 与当前WebRequest对象相关的executor 
        wRequest.set_executor(executor);    
         
         // executeRequest() - 执行请求 
        executor.executeRequest(); 

         // executor - 与当前WebRequest对象相关的executor 
         var executor =    wRequest.get_executor(); 
         
         // started - 是否已经开始处理请求 
        alert( "executor是否已经开始处理请求:" + executor.get_started()) 


// 通知ScriptManager这段脚本已经加载完毕     
if ( typeof(Sys) !==  "undefined") Sys.Application.notifyScriptLoaded();
 
 
WebRequestManagerAndXMLHttpExecutor.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="WebRequestManagerAndXMLHttpExecutor.aspx.cs" 
        Inherits="ClientScripting_SysNet_WebRequestManagerAndXMLHttpExecutor" Title="WebRequestManager和XMLHttpExecutor" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="Server"> 
                <scripts> 
                        <asp:ScriptReference Path="~/ClientScripting/SysNet/WebRequestManagerAndXMLHttpExecutor.js" /> 
                </scripts> 
        </asp:ScriptManagerProxy> 
        <p> 
                <input type="button" id="btnGetData" value="GetData" /> 
        </p> 
        <p> 
                <input type="button" id="btnExecuteRequest" value="ExecuteRequest" /> 
        </p> 
        <hr /> 
        <div id="resultId" style="background-color: Aqua;"> 
        </div> 
</asp:Content>
 
运行结果
1、单击“GetData”按钮
可能提示超时,也可能提示终止,也可能显示与“PostTarget.aspx”相关的结果

2、单击“ExecuteRequest”按钮
提示executor已经开始处理请求,显示与“GetTarget.xml”相关的结果


OK
[源码下载]


     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/344807 ,如需转载请自行联系原作者
相关文章
|
5月前
|
存储 JSON 开发工具
Visual Studio编程效率提升技巧集(提高.NET编程效率)
Visual Studio编程效率提升技巧集(提高.NET编程效率)
Visual Studio编程效率提升技巧集(提高.NET编程效率)
|
2月前
|
传感器 数据采集 物联网
探索.NET nanoFramework:为嵌入式设备编程的新途径
探索.NET nanoFramework:为嵌入式设备编程的新途
56 7
|
7月前
|
开发框架 前端开发 JavaScript
ASP.NET AJAX使用方法概述(三)
ASP.NET AJAX使用方法概述(三)
56 1
|
3月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
68 5
|
4月前
|
大数据 开发工具 开发者
从零到英雄:.NET核心技术带你踏上编程之旅,构建首个应用,开启你的数字世界探险!
【8月更文挑战第28天】本文带领读者从零开始,使用强大的.NET平台搭建首个控制台应用。无论你是新手还是希望扩展技能的开发者,都能通过本文逐步掌握.NET的核心技术。从环境搭建到创建项目,再到编写和运行代码,详细步骤助你轻松上手。通过计算两数之和的小项目,你不仅能快速入门,还能为未来开发更复杂的应用奠定基础。希望本文为你的.NET学习之旅开启新篇章!
35 1
|
4月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
4月前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
134 7
|
4月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
45 0
|
4月前
|
传感器 数据采集 物联网
探索未来:.NET nanoFramework引领嵌入式设备编程革新之旅
【8月更文挑战第28天】.NET nanoFramework 是一款专为资源受限的嵌入式设备设计的轻量级、高性能框架,基于 .NET Core,采用 C# 进行开发,简化了传统底层硬件操作的复杂性,极大提升了开发效率。开发者可通过 Visual Studio 或 Visual Studio Code 快速搭建环境并创建项目,利用丰富的库和驱动程序轻松实现从基础 LED 控制到网络通信等多种功能,显著降低了嵌入式开发的门槛。
86 0
|
4月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?