新瓶旧酒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 ,如需转载请自行联系原作者
相关文章
|
29天前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
60 10
|
12天前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
39 5
|
5月前
|
开发框架 前端开发 JavaScript
ASP.NET AJAX使用方法概述(三)
ASP.NET AJAX使用方法概述(三)
43 1
|
2月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
2月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
|
3月前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
2月前
|
开发框架 .NET 数据库连接
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
|
4月前
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
141 0
|
5月前
|
开发框架 缓存 前端开发
安装ASP.NET AJAX (一安装)
安装ASP.NET AJAX (一安装)
67 0
|
5月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
277 5
下一篇
无影云桌面