新瓶旧酒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 ,如需转载请自行联系原作者
相关文章
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
32 0
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
|
5月前
|
开发框架 前端开发 .NET
用ajax和asp.net实现智能搜索功能
用ajax和asp.net实现智能搜索功能
43 0
|
7月前
|
人工智能 自然语言处理 程序员
.NET开发工作效率提升利器 - CodeGeeX AI编程助手
.NET开发工作效率提升利器 - CodeGeeX AI编程助手
133 0
|
7月前
|
人工智能 自然语言处理 程序员
.NET开发工作效率提升利器 - CodeGeeX AI编程助手
.NET开发工作效率提升利器 - CodeGeeX AI编程助手
105 1
|
9月前
|
SQL 开发框架 缓存
.NET的并发编程(TPL编程)是什么? (下)
.NET的并发编程(TPL编程)是什么? (下)
|
9月前
|
SQL 开发框架 缓存
|
10月前
|
开发框架 前端开发 JavaScript
【Asp.net】 Ajax小例子
【Asp.net】 Ajax小例子
67 0
|
11月前
|
人工智能 机器人 API
.NET面向AI编程——SK框架(SemanticKernel)的简易入门实践
随着ChatGPT开始在各个领域遍地开花,有关的应用也开始层出不穷。随着微软开源SK框架,无疑是给.NET开发者带来面向AI应用的新机遇。以下内容,通过创建一个简单的prompt开始,开发一个使用SK框架进行开发的入门教程,供参考。
203 0
|
存储 Go 网络架构
Go HTTP 编程 | 02 - net/http 包剖析
Go HTTP 编程 | 02 - net/http 包剖析
Go HTTP 编程 | 02 - net/http 包剖析

相关实验场景

更多