2016-07-05 93 views
0

我正在開發一個windows phone 8.1應用程序。在這個應用程序中,我需要調用寧靜的apis。這裏是我的API調用方法windows phone 8.1 call rest api c#

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?

回答

1

在對錯誤的描述中,它表示您尚未將名爲System.Net.Http的程序集添加到您的參考中。只要嘗試右鍵點擊應用的參考資料[圖片1],然後選擇Add reference即可。在框架列表中找到System.Net.Http並將其添加到您的項目中[image 2]。

References image enter image description here

[下編輯HERE]

自認爲不是問題,我已經把它調用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~"); 
} 
+0

我針對的是windows phone 8.1。 –

+0

看我的編輯。讓我知道它是否適用於您 – rhcpfan

+0

感謝您的回覆。我嘗試過這個。但不工作。給出錯誤'錯誤CS0012:類型'TaskAwaiter <>'在未引用的程序集中定義。你必須添加一個引用程序集'System.Threading.Tasks,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。' –

0

您必須添加Microsoft.Net.Http的NuGet包的Windows Phone(和其他平臺一樣)。你可以在這裏找到包信息:

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

通過命令行或右鍵單擊該項目中添加這,然後選擇Manage NuGet Packages,然後搜索Microsoft.Net.Http最後選擇Install

使用包管理器控制檯,您可以使用以下命令將此包添加到您的項目中。

Install-Package Microsoft.Net.Http