silverlight: http请求的GET及POST示例

简介: http请求的get/post并不是难事,只是silverlight中一切皆是异步,所以代码看起来就显得有些冗长了,下面这个HttpHelper是在总结 园友 的基础上,修改得来: 1 namespace SLAwb.

http请求的get/post并不是难事,只是silverlight中一切皆是异步,所以代码看起来就显得有些冗长了,下面这个HttpHelper是在总结 园友 的基础上,修改得来:

 1 namespace SLAwb.Helper
 2 {
 3     public sealed class MediaType
 4     {
 5         /// <summary>
 6         /// "application/xml"
 7         /// </summary>
 8         public const string APPLICATION_XML = "application/xml";
 9 
10         /// <summary>
11         /// application/json
12         /// </summary>
13         public const string APPLICATION_JSON = "application/json";
14 
15         /// <summary>
16         /// "application/x-www-form-urlencoded"
17         /// </summary>
18         public const string APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded";
19      
20     }
21 }
View Code
 1 using System;
 2 using System.IO;
 3 using System.Net;
 4 using System.Threading;
 5 
 6 namespace SLAwb.Helper
 7 {
 8     /// <summary>
 9     /// Http工具类,用于向指定url发起Get或Post请求
10     /// http://yjmyzz.cnblogs.com/
11     /// </summary>
12     public class HttpHelper
13     {
14         private string postData;
15         SynchronizationContext currentContext;
16         SendOrPostCallback sendOrPostCallback;
17 
18         /// <summary>
19         /// 从指定url以Get方式获取数据
20         /// </summary>
21         /// <param name="url"></param>
22         /// <param name="completedHandler"></param>
23         public void Get(string url, DownloadStringCompletedEventHandler completedHandler)
24         {
25             WebClient client = new WebClient();
26             client.DownloadStringCompleted += completedHandler;
27             client.DownloadStringAsync(new Uri(url));
28         }
29 
30 
31 
32         /// <summary>
33         /// 向指定url地址Post数据
34         /// </summary>
35         /// <param name="url"></param>
36         /// <param name="data"></param>
37         /// <param name="mediaType"></param>
38         /// <param name="synchronizationContext"></param>
39         /// <param name="callBack"></param>
40         public void Post(string url, string data, string mediaType, SynchronizationContext synchronizationContext, SendOrPostCallback callBack)
41         {
42             currentContext = synchronizationContext;
43             Uri endpoint = new Uri(url);
44             sendOrPostCallback = callBack;
45             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint);
46             request.Method = "POST";
47             request.ContentType = mediaType;
48             postData = data;
49             request.BeginGetRequestStream(new AsyncCallback(RequestReadySocket), request);
50         }
51 
52         private void RequestReadySocket(IAsyncResult asyncResult)
53         {
54             WebRequest request = asyncResult.AsyncState as WebRequest;
55             Stream requestStream = request.EndGetRequestStream(asyncResult);
56 
57             using (StreamWriter writer = new StreamWriter(requestStream))
58             {
59                 writer.Write(postData);
60                 writer.Flush();
61             }
62 
63             request.BeginGetResponse(new AsyncCallback(ResponseReadySocket), request);
64         }
65 
66         private void ResponseReadySocket(IAsyncResult asyncResult)
67         {
68             try
69             {
70                 WebRequest request = asyncResult.AsyncState as WebRequest;
71                 WebResponse response = request.EndGetResponse(asyncResult);
72                 using (Stream responseStream = response.GetResponseStream())
73                 {
74                     StreamReader reader = new StreamReader(responseStream);
75                     string paramStr = reader.ReadToEnd();
76                     currentContext.Post(sendOrPostCallback, paramStr);
77                 }
78             }
79             catch (Exception e)
80             {
81                 currentContext.Post(sendOrPostCallback, e.Message); 
82             }
83             
84         }
85 
86 
87     }
88 }
View Code

Silverlight中的测试代码:
xaml部分

 1 <UserControl x:Class="SLAwb.MainPage"
 2     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6     mc:Ignorable="d"
 7     d:DesignHeight="480" d:DesignWidth="640">
 8 
 9     <Grid x:Name="LayoutRoot" Background="White">
10         <Grid.RowDefinitions>
11             <RowDefinition Height="30"></RowDefinition>
12             <RowDefinition Height="*"></RowDefinition>
13             <RowDefinition Height="2*"></RowDefinition>
14         </Grid.RowDefinitions>        
15         <Grid Grid.Row="0" Margin="3">
16             <Grid.ColumnDefinitions>
17                 <ColumnDefinition Width="40"></ColumnDefinition>
18                 <ColumnDefinition Width="*"></ColumnDefinition>
19                 <ColumnDefinition Width="75"></ColumnDefinition>
20                 <ColumnDefinition Width="95"></ColumnDefinition>
21                 <ColumnDefinition Width="80"></ColumnDefinition>
22                 <ColumnDefinition Width="80"></ColumnDefinition>
23             </Grid.ColumnDefinitions>
24             <TextBlock VerticalAlignment="Center" TextAlignment="Right">地址:</TextBlock>
25             <TextBox Name="txtUrl" Grid.Column="1" Text="http://localhost/"></TextBox>
26             <TextBlock Grid.Column="2" VerticalAlignment="Center" TextAlignment="Right">MediaType:</TextBlock>
27             <TextBox Name="txtMediaType" Grid.Column="3" Text="application/xml"></TextBox>
28             <Button Name="btnPost" Content="Post" Grid.Column="4" Margin="3,1" Click="btnPost_Click"></Button>
29             <Button Name="btnGet" Content="Get" Grid.Column="5" Margin="3,1" Click="btnGet_Click"></Button>
30         </Grid>
31         
32         <Grid Grid.Row="1">
33             <Grid.ColumnDefinitions>
34                 <ColumnDefinition Width="40"></ColumnDefinition>
35                 <ColumnDefinition Width="*"></ColumnDefinition>
36             </Grid.ColumnDefinitions>
37             <TextBlock VerticalAlignment="Top" TextAlignment="Right">数据:</TextBlock>
38             <TextBox Name="txtPostData" Grid.Column="1" Margin="3" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"></TextBox>
39         </Grid>
40 
41         <Grid Grid.Row="2">
42             <Grid.ColumnDefinitions>
43                 <ColumnDefinition Width="40"></ColumnDefinition>
44                 <ColumnDefinition Width="*"></ColumnDefinition>
45             </Grid.ColumnDefinitions>
46             <TextBlock VerticalAlignment="Top" TextAlignment="Right">返回:</TextBlock>
47             <TextBox Name="txtResult" Grid.Column="1" Margin="3" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"></TextBox>
48         </Grid>
49     </Grid>
50 </UserControl>
View Code

cs部分

 1 using SLAwb.Helper;
 2 using System;
 3 using System.Net;
 4 using System.Threading;
 5 using System.Windows;
 6 using System.Windows.Controls;
 7 
 8 namespace SLAwb
 9 {
10     public partial class MainPage : UserControl
11     {
12         private SynchronizationContext currentContext;
13 
14 
15         public MainPage()
16         {
17             InitializeComponent();
18             this.currentContext = SynchronizationContext.Current;
19         }
20 
21         private void btnPost_Click(object sender, RoutedEventArgs e)
22         {
23             BeforeReturn();
24             HttpHelper httpHelper = new HttpHelper();
25             httpHelper.Post(txtUrl.Text, txtPostData.Text, txtMediaType.Text, currentContext, PostCompletedHandler);
26         }
27 
28         private void PostCompletedHandler(Object obj)
29         {
30             txtResult.Text = obj.ToString();
31         }
32 
33         private void btnGet_Click(object sender, RoutedEventArgs e)
34         {
35             BeforeReturn();
36             HttpHelper httpHelper = new HttpHelper();
37             httpHelper.Get(txtUrl.Text, GetCompletedHandler);            
38         }
39 
40 
41         void BeforeReturn() {
42             txtResult.Text = "loading...";
43         }
44 
45 
46         void GetCompletedHandler(object sender, DownloadStringCompletedEventArgs e)
47         {
48             if (e.Error == null)
49             {
50                 txtResult.Text = e.Result;
51             }
52             else
53             {
54                 txtResult.Text = e.Error.Message;
55             }
56         }
57     }
58 }
View Code

 

目录
相关文章
|
20天前
automate Flow中如何用HTTP,POST的方式发送短信?
automate Flow中如何用HTTP,POST的方式发送短信?
29 2
|
2月前
|
存储 运维 Java
函数计算产品使用问题之如何使用Python的requests库向HTTP服务器发送GET请求
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
15天前
|
JavaScript 前端开发 Java
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
|
2月前
|
安全 Java 网络安全
RestTemplate进行https请求时适配信任证书
RestTemplate进行https请求时适配信任证书
32 3
|
18天前
|
移动开发 JavaScript 前端开发
"解锁axios GET请求新姿势!揭秘如何将数组参数华丽变身,让你的HTTP请求在云端翩翩起舞,挑战技术极限!"
【8月更文挑战第20天】二维码在移动应用中无处不在。本文详述了在UniApp H5项目中实现二维码生成与扫描的方法。通过对比插件`uni-app-qrcode`和库`qrcode-generator`生成二维码,以及使用插件和HTML5 API进行扫描,帮助开发者挑选最佳方案。无论是即插即用的插件还是灵活的JavaScript实现,都能满足不同需求。
24 0
|
2月前
|
测试技术 Python
我们假设要测试一个名为`http://example.com`的网站,并对其进行简单的GET请求性能测试。
我们假设要测试一个名为`http://example.com`的网站,并对其进行简单的GET请求性能测试。
|
2月前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
3月前
|
缓存 安全 JavaScript
全面比较HTTP GET与POST方法
全面比较HTTP GET与POST方法
48 7
|
3月前
|
Web App开发 存储 网络安全
Charles抓包神器的使用,完美解决抓取HTTPS请求unknown问题
本文介绍了在 Mac 上使用的 HTTP 和 HTTPS 抓包工具 Charles 的配置方法。首先,强调了安装证书对于抓取 HTTPS 请求的重要性,涉及 PC 和手机端。在 PC 端,需通过 Charles 软件安装证书,然后在钥匙串访问中设置为始终信任。对于 iOS 设备,需设置 HTTP 代理,通过电脑上的 IP 和端口访问特定网址下载并安装证书,同时在设置中信任该证书。配置 Charles 包括设置代理端口和启用 SSL 代理。完成这些步骤后,即可开始抓包。文章还提及 Android 7.0 以上版本可能存在不信任用户添加 CA 证书的问题,但未提供解决办法。
603 0
Charles抓包神器的使用,完美解决抓取HTTPS请求unknown问题
|
3月前
|
JSON 安全 Java
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
47 0
下一篇
DDNS