首页 > 代码库 > silverlight: http请求的GET及POST示例
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/json12 /// </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 HttpHelper13 {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 =http://www.mamicode.com/ 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 try69 {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 : UserControl11 {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 else53 {54 txtResult.Text = e.Error.Message;55 }56 }57 }58 }
silverlight: http请求的GET及POST示例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。