Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击按钮即可使用简单的web服务_C#_Json_Xaml_Xamarin_Xamarin.forms - Fatal编程技术网

C# 单击按钮即可使用简单的web服务

C# 单击按钮即可使用简单的web服务,c#,json,xaml,xamarin,xamarin.forms,C#,Json,Xaml,Xamarin,Xamarin.forms,我有一个带按钮的简单视图。当我点击按钮时,我想调用web服务并使用它的数据。我的看法是: 第1.xaml页 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloWorld.Pages.Page1" xmlns:local="clr-namespace:Xama

我有一个带按钮的简单视图。当我点击按钮时,我想调用web服务并使用它的数据。我的看法是:

第1.xaml页

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
     x:Class="HelloWorld.Pages.Page1"
     xmlns:local="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Pages"
  <StackLayout Padding="20, 10" 
            HorizontalOptions="Center">
    <Button Clicked="B1_Clicked"
            Text="Click Me" />
  </StackLayout>
</ContentPage>
这是service.cs

public async Task<Data> GetInfoAsync()
    { 
        DataInfo = null;
        try
        {
            var client = new HttpClient();
            HttpContent content = new StringContent("", Encoding.UTF8, "application/json");

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var response = await client.PostAsync("https://www.getdata/feed", content);
            response.EnsureSuccessStatusCode();
            string json = await response.Content.ReadAsStringAsync();

            data = JsonConvert.DeserializeObject<DataInfo>(json);
        }
        catch(Exception e)
        {
            Debug.WriteLine(e.Message.ToString());
        }
        Debug.WriteLine(data.data);
        return data.data;
    }
公共异步任务GetInfoAsync() { DataInfo=null; 尝试 { var client=新的HttpClient(); HttpContent=newstringcontent(“,Encoding.UTF8,“application/json”); client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”); var response=wait client.PostAsync(“https://www.getdata/feed“,内容); response.EnsureSuccessStatusCode(); string json=wait response.Content.ReadAsStringAsync(); data=JsonConvert.DeserializeObject(json); } 捕获(例外e) { Debug.WriteLine(例如Message.ToString()); } Debug.WriteLine(data.data); 返回数据.data; }
我想这很简单,但我是xamarin的新手,所以请原谅我对知识的缺乏:)

调用web服务最简单的方法是使用Refit

这个插件简化了调用web服务所需编写的代码

它还处理从Json到类的头传递和反序列化


如果您刚刚起步,我建议您在代码落后的道路上走得太远之前使用MVVM框架

您已经在调用该服务-您只需要从事件处理程序调用GetInfoAsync方法

private async void B1_Clicked(object sender, EventArgs e)
{
     Service src = new Service();
     var data = await src.GetInfoAsync();
} 

这听起来像是你在问“如何调用Web服务”,答案是:“哪种Web服务?”@Christopher我添加了服务对不起:)我必须警告你异常处理。这段代码非常危险,因为在发生致命异常后,您将继续执行。一些你永远不应该尝试去做的事情。在将类似的内容发布到生产代码中之前,您应该阅读这两篇关于poper异常处理的文章:我已经拥有了服务。我不知道如何在page1.xaml.cs中调用它并使用它的数据:/Yes,Refit允许您调用该服务。这是一个庞大的主题,取决于服务的编写方式和端点的外观。链接上有很多不同的例子,我没有投反对票。我正在读你提供的关于改装的链接
private async void B1_Clicked(object sender, EventArgs e)
{
     Service src = new Service();
     var data = await src.GetInfoAsync();
}