使用RestSharp在Windows Phone上调用ASP.NET Web API

在本文中,将探讨如何使用RestSharp在Windows Phone上调用ASP.NET Web API。将创建一个简单的演示应用程序,使用已经开发的简单RESTful服务。不会在本文中开发任何服务,尽管将使用已经开发的服务。不会详细讨论Windows Phone的特性,唯一要讨论的是显示和使用API的JSON数据/响应。

先决条件

需要以下条件来继续本文/帖子:

  • 带有Windows Phone支持的Visual Studio 2013或更高版本(8.0或更高版本)
  • 对Windows Phone的基本了解
  • 对RESTful服务的基本了解
  • 对ASP.NET Web API的基本了解 - 将使用Web API,尽管不开发相同的,但应该对这些有基本的了解。
  • 任何Rest客户端 - 在这里将使用RestSharp forWindows Phone。还有其他使用Microsoft HTTP Client来消费ASP.NET Web API的替代方案。
  • 对JSON的基本了解

将要使用哪些服务?

在本文/帖子中,将使用之前创建的ASP.NET Web API,托管在http://crudwithwebapi.azurewebsites.net/。

将尝试在本文中讨论非常简单的资源。以下是Web API的资源:

操作 HTTP方法 相对URI
获取服务器数据列表 GET /api/serverdata
通过ID获取服务器数据 GET /api/serverdata/id
通过数据类型获取服务器数据 GET /api/serverdata/type/datatype
通过机器IP获取服务器数据 GET /api/serverdata/ip/ip
创建新的服务器数据 POST /api/serverdata
更新现有的服务器数据 PUT /api/serverdata/id
删除现有的服务器数据 DELETE /api/serverdata/id

开始创建示例项目

按照以下步骤创建一个示例项目:

  1. 启动Visual Studio并选择“文件”->“新建”->“项目…”(或按Ctrl + Shift + N)。
  2. 从安装的模板中选择Visual C# -> 存储应用 -> Windows Phone应用 -> 空白应用(Windows Phone)。
  3. 给新项目起一个名字,叫它ConsumeWebAPIInWindowsPhone,以使其成为一个自解释的名字。
  4. 顺便说一句,勾选了“添加到源代码控制”。
  5. 现在点击“确定”。

将得到一个空白的Windows Phone应用程序。

添加XAML代码

在xaml文件中添加以下XAML代码:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <ListBox x:Name="LstServerData"> <ListBox.ItemTemplate> <DataTemplate> <Grid Background="DarkOrange" Width="460" Height="150" Margin="0,10,0,0"> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding Title}" Foreground="Black" FontSize="30" Margin="10,10,0,0"/> <TextBlock Text="{Binding Description}" FontSize="20" Margin="10,10,20,0" TextWrapping="Wrap"/> </StackPanel> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid>

创建数据模型

在数据模型文件夹下添加新的类ServerData.cs,并编写以下代码:

public class ServerData { public int Id { get; set; } public string InitialDate { get; set; } public string EndDate { get; set; } public int OrderNumber { get; set; } public bool IsDirty { get; set; } public string IP { get; set; } public int Type { get; set; } public int RecordIdentifier { get; set; } }

可选:添加HTTP客户端和JSON.NET支持

这一部分是可选的,没有在演示中使用HTTP客户端。如果是HTTP客户端的粉丝,这一部分是为阅读并相应地修改应用程序的。

将使用ASP.NET Web API,其响应为JSON,因此需要HTTP客户端和JSON.NET(用于序列化/反序列化JSON数据)。

打开Nuget管理控制台并输入以下命令:

Install-Package Microsoft.Net.Http Install-Package Newtonsoft.Json

或者,可以使用Nuget对话框窗口添加对两者的支持:

private async void GetServerData_HTTPClient(object sender, RoutedEventArgs e) { try { using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri("http://crudwithwebapi.azurewebsites.net"); var url = "api/serverdata"; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { var data = response.Content.ReadAsStringAsync(); var lstData = JsonConvert.DeserializeObject<List<ServerData>>(data.Result.ToString()); LstServerData.ItemsSource = lstData; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }

添加RestSharp对Windows Phone的支持

在本文中,将使用RestSharp for Windows Phone作为ReST客户端。让从Nuget添加:

Install-Package RestSharp

现在,准备编写一个简单的代码来调用Web API。

创建布局

让保持简单,所以,在MainPage.xaml文件中添加以下XAML代码。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <ListBox x:Name="LstServerData"> <ListBox.ItemTemplate> <DataTemplate> <Grid Background="DarkOrange" Width="460" Height="150" Margin="0,10,0,0"> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding Title}" Foreground="Black" FontSize="30" Margin="10,10,0,0"/> <TextBlock Text="{Binding Description}" FontSize="20" Margin="10,10,20,0" TextWrapping="Wrap"/> </StackPanel> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid>

创建应用程序标题

只需在上述代码片段之前添加以下几行,就可以为应用程序制作一个体面的标题:

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="Demo: Consume Web API" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0" /> <TextBlock Text="Server Data" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" /> </StackPanel>

调用Web API

为了确保正在调用Web API,需要一个方法来进行调用。希望这个演示尽可能简单,所以不考虑任何模式和编程原则,如果想扩展,请尝试使用一些SOLID编程原则。要了解更多关于SOLID原则的信息,请阅读本文:

SOLID编程原则。

要进行调用,只需将以下代码片段添加到MainPage.xaml.cs文件中:

private void GetServerData() { const string url = "http://crudwithwebapi.azurewebsites.net"; var client = new RestClient(url); var request = new RestRequest("api/serverdata", Method.GET) { RequestFormat = DataFormat.Json }; client.ExecuteAsync<List<ServerData>>(request, response => { LstServerData.ItemsSource = response.Data; }); }

在这里,只是定义了url和一个资源类型,这是情况下的GET,然后进行了异步调用。不会详细讨论这个。如果想了解更多,建议阅读并行编程。

准备查看输出

现在只需从MainPage()调用方法,就像下面所示:

public MainPage() { InitializeComponent(); GetServerData(); }

准备好在手机上看到一些令人敬畏的结果。

获取输出

只需运行演示,将在Windows Phone模拟器中得到一个体面的移动页面:

收到了输出并消费了ASP.NET WEBAPI,已经完成了主要主题。但是,在这里想让注意上面的输出。

注意到了吗?

在第一时间,并没有注意到,但再看一眼。啊!在这里,需要做一些改变,日期格式并不好,实际上,正在显示从WEB API接收到的日期。这些日期是JSON格式的,并且具有UNIX格式。让使它们易于阅读。

将DataType从string更改为DateTime,并定义自己的格式:

public String Description { get { return string.Format("Start Date:{0}, End Date:{1}, Order Number:{2}, IP:{3}, Record Type:{4}", InitialDate.ToString("F"), EndDate.ToString("F"), OrderNumber, IP, Type); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485