使用Xamarin.Forms消耗ASZUTE托管ASP.NET WEPAPI服务

 restxamarinttitlelogo.

让我们看一下我们如何在Xamarin.forms应用程序中消耗基于其余的Web服务。在此博客文章中,我们将查看ASP.NET WEPAPI服务如何在Azure上托管,以及如何在Xamarin.Forms应用程序的便携式类库(PCL)中消耗,并编写一个小UI以与其余的交互服务。请注意,我在创建此项目的示例时使用Visual Studio 2013。

创建后端

ASP.NET WebAPI可以被视为无头网站,因此ASP.NET MVC的许多概念适用,但我们不会写任何HTML,JavaScript和CSS代码来显示数据,因为它将简单地通过该数据提供数据控制器。默认情况下,控制器可以将序列化的数据返回给JSON或XML。对于此示例,我创建了两个控制器,只需返回一个字符串并将其作为HTTP包的内容返回:

public class BasicController : ApiController{    // GET: api/Basic/5    public string Get(int id)    {        return string.Format("You entered: {0}", id);    }}

第二个将将序列化对象返回给呼叫者。默认设置将请求使用JSON序列化的数据,但我们将在稍后开始。第二个控制器看起来如下:

public class ObjectController : ApiController{    // GET: api/Object/5    public NumberWrapper Get(int id)    {        return new NumberWrapper{WrappedNumber =  string.Format("You entered: {0}", id)};    }}

和普通的旧CLR对象(PO​​CO)您可以在此处查看:

public class NumberWrapper{    public string WrappedNumber { get; set; }}

所以一切都很直,现在让我们看一下我们如何消耗服务一旦运行就会消耗服务。

注意:您可以在Azure上发布此WebService,这使得您可以轻松地从电话和其他虚拟机(VMS)访问它,因为您不会因防火墙设置而扰乱,因此可以专注于手头的任务。

在PCL中消耗休息服务

为了消耗休息服务,我们需要安装WebHTTPClient 尼古特 从Microsoft包裹。因此,允许通过右键单击解决方案,然后搜索WebHttpClient,将NuGet包添加到PCL,Android,IOS和Windows Phone Project。为了指导json,我们将使用 JSON.NET. 图书馆来自 詹姆斯牛顿国王 ,因此更多地搜索JSON.NET并再次安装所有客户端项目。

创建与后端的通信 httpwrapper.cs. , 这 基础控制器 简单的 内容 结果 读回并回复:

public async Task<string> GetBasicDataAsync(int i){    var uri = string.Format("//xamarinwebapiservice.azurewebsites.net/api/basic/{0}", i);        var result = await _httpClient.GetAsync(uri);    return await result.Content.ReadAsStringAsync();}

当我们打电话的时候 ObjectController. 我们收到了json 内容 结果并必须首先将其反序列:

public async Task<NumberWrapper> GetNumberWrapperDataAsync(int i){    var uri = string.Format("{0}object/{1}", BaseUrl, i);    var result = await _httpClient.GetAsync(uri);    var jsonNumberWRapper = await result.Content.ReadAsStringAsync();    return JsonConvert.DeserializeObject<NumberWrapper>(jsonNumberWRapper);}

到目前为止,现在让我们创建一个小UI来消耗服务及其控制器。

客户UI.

我会使用 MVVM光 在UI的数据绑定中,在前面的帖子上,您可以找到关于如何使用MVVM灯开始的介绍。 UI允许您选择一个号码,您可以通过选择按钮选择呼叫:

<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms"             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"             x:Class="WebApiXamarinForms.View.MainPage">  <StackLayout>    <Picker SelectedIndex="{Binding SelectedNumberIndex}" HorizontalOptions="CenterAndExpand" Title="Numbers">      <Picker.Items>        <x:String>1</x:String>        <x:String>2</x:String>        <x:String>3</x:String>        <x:String>4</x:String>        <x:String>5</x:String>        <x:String>6</x:String>        <x:String>7</x:String>        <x:String>8</x:String>        <x:String>9</x:String>        <x:String>10</x:String>      </Picker.Items>    </Picker>    <Button Text="Basic Submit" Command="{Binding BasicSubmitCommand}" HorizontalOptions="CenterAndExpand"></Button>    <Button Text="Object Submit" Command="{Binding ObjectSubmitCommand}" HorizontalOptions="CenterAndExpand"></Button>    <ActivityIndicator IsRunning="{Binding CallingService}"></ActivityIndicator>    <Label Text="{Binding Response}" VerticalOptions="Center" HorizontalOptions="CenterAndExpand" />  </StackLayout></ContentPage>

请注意 选择器 控件尚未支持数据绑定,因此这是目前如何设置值的唯一方法。

在里面 MainViewModel.cs. 对服务的调用是在命令调用期间进行的,结果是相应地写入UI。在这里 Basicsubmitcommand. :

private async void GetBasicResponseAsync(){    CanGetBasicResponse = false;    CallingService = true;    Response = await _webService.GetBasicDataAsync(_numbers[SelectedNumberIndex]);    CallingService = false;    CanGetBasicResponse = true;}

ObjectubmitCommand. :

private async void GetObjectResponseAsync(){    CanGetBasicResponse = false;    CallingService = true;    var numberWrapper = await _webService.GetNumberWrapperDataAsync(_numbers[SelectedNumberIndex]);    Response = numberWrapper.WrappedNumber;    CallingService = false;    CanGetBasicResponse = true;}

结论

在此博客文章中,我们快速查看了如何设置WebAPI控制器。此外,我们研究了在Xamarin.forms客户端上创建了HTTP调用的研究以及如何在程序中解析和使用响应。我们还显示了如何从Web服务中消耗作为JSON字符串收到的对象。

您可以找到整个源代码 GitHub. .

del.icio.us标签: xamarin.forms. , XAMARIN. , ASP.NET WEPAPI. , Azure.

Updated: