silverlight: http请求的GET及POST示例
时间:2022-04-23
本文章向大家介绍silverlight: http请求的GET及POST示例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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 }
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 }
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>
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 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (29)字符截取命令awk
- RTSP协议视频平台EasyNVR流媒体服务器音频播放完毕后,视频为什么也会卡住?
- Redis | Redis 有序集合相关命令
- TypeScript 4.0正式发布!现在是开始使用它的最佳时机
- 微服务开源框架TARS 之 基础组件
- Gitlab-ci:从零开始的前端自动化部署
- 从 1 到 0 构建博客项目(导读)
- 应该在JavaScript中使用Class吗
- Go语言小书 | 关于编译和语法
- Go语言小书 | 小试牛刀,从hello world开始
- 3分钟短文 | Laravel 中间件传递数据到控制器
- 3分钟短文 | Laravel 表单验证数组的数据
- 3分钟短文:Laravel 编程中优雅地添加定义常量
- 极客算法训练笔记(四),栈和队列,从实际应用看数据结构
- 微博爬虫出错居然还和网络运营商有关