繁体   English   中英

Windows Phone 8.1 Call Rest API C#

[英]windows phone 8.1 call rest api c#

我正在开发一个windows phone 8.1应用程序。 在此应用中,我需要调用Resting API。 这是我的api调用方法

public static async Task<HttpResponseMessage> callrestApi(string baseurl, string api, string method, string contenttype, object objPost)
{
    try
    {
        HttpResponseMessage response = null;
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(baseurl);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contenttype));

            switch (method.ToLower())
            {
                case "get":
                    // HTTP GET
                    response = await client.GetAsync(api);
                    if (response.IsSuccessStatusCode)
                    {
                        object obj = await response.Content.ReadAsStringAsync();
                        //return obj;
                    }
                    break;
                case "post":
                    // HTTP POST
                    response = await client.PostAsync(api, new StringContent(objPost.ToString(), Encoding.UTF8, contenttype));
                    if (response.IsSuccessStatusCode)
                    {
                        object obj = await response.Content.ReadAsStringAsync();
                        //return obj;
                    }
                    break;
                default:
                    break;
            }
        }
        return response;
    }
    catch (Exception)
    {
        return null;
    }
}

我从MainPage.xaml调用此方法进行登录。 我通过用户名和密码传递json obj。

var resp = await Constants.callrestApi(Constants.base_Url, Constants.apiList.loginApi, Constants.httpmethod.post, Constants.contenttype.json, jsonObj);
if (resp != null)
{

}

当我调试它时,我得到以下错误

错误CS0012:类型'HttpResponseMessage'在未引用的程序集中定义。 您必须添加对程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用。

我认为问题出在await 如何调用Restful API?

在错误的描述中,它表示您尚未将名为System.Net.Http的程序集添加到引用中。 只需尝试右键点击您应用的引用[image 1],然后选择Add reference 在Frameworks列表中找到System.Net.Http并将其添加到您的项目中(图2)。

参考图片 在此处输入图片说明

[在这里编辑]

由于这不是问题,因此我整理了一个小的示例,该示例调用REST API(异步)。 让我知道这是否适合您,如果不能提供有关该API的更多详细信息,请与我联系。

public async Task<string> callRestAPI(string serviceURL)
{
    var getRequest = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, serviceURL);

    var postRequest = new System.Net.Http.HttpRequestMessage(HttpMethod.Post, serviceURL);
    postRequest.Content = new StringContent("string data");

    using (var httpClient = new System.Net.Http.HttpClient())
    {
        var getResponse = await httpClient.SendAsync(getRequest);
        var postResponse = await httpClient.SendAsync(postRequest);
        var getData = await getResponse.Content.ReadAsStringAsync();
        var postData = await postResponse.Content.ReadAsStringAsync();

        Debug.WriteLine(getData);
        Debug.WriteLine(postData);

        return getData;
    }
}

我正在调用该方法,仅用于在OnNavigatedTo方法中进行测试,如下所示:

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    // TODO: Prepare page for display here.

    // TODO: If your application contains multiple pages, ensure that you are
    // handling the hardware Back button by registering for the
    // Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
    // If you are using the NavigationHelper provided by some templates,
    // this event is handled for you.

    var testResult = await callRestAPI("~your URL here~");
}

您必须为Windows Phone(以及其他平台)添加Microsoft.Net.Http NuGet程序包。 您可以在此处找到包装信息:

https://www.nuget.org/packages/Microsoft.Net.Http/

通过命令行添加此文件,或右键单击该项目,然后选择“ Manage NuGet Packages ,然后搜索Microsoft.Net.Http ,最后选择“ Install

使用程序包管理器控制台,可以使用以下命令将此程序包添加到项目中。

Install-Package Microsoft.Net.Http 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM