2016-07-05 12 views
0

私はwindows phone 8.1アプリを開発中です。このアプリでは、私は安らかなapisを呼び出す必要がありました。ここで私は、ログイン用のMainPage.xamlをからこのメソッドを呼び出していますwindows phone 8.1コールレスト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; 
    } 
} 

私のAPI呼び出し方法です。私はユーザー名とパスワードでjson objを渡しています。型「HttpResponseMessage」が参照されていないアセンブリで定義されています。私はこれをデバッグするとき

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

} 

私は次のようなエラーに

エラーCS0012を取得しています。 アセンブリ 'System.Net.Http、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'への参照を追加する必要があります。

私は問題がawaitにあると思います。どのように私は安らかなAPIを呼び出すことができますか?

答えて

1

エラーの説明には、System.Net.Httpという名前のアセンブリを参照に追加していないと記載されています。お使いのアプリのリファレンス[画像1]を右クリックし、Add referenceを選択してください。フレームワークのリストでSystem.Net.Httpを見つけ、プロジェクト[画像2]に追加してください。 [ここから編集]

References image enter image description 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

あなたは(だけでなく、その他のプラットフォーム)のWindows Phone用のMicrosoft.Net.Http NuGetパッケージを追加する必要があります。どちらの

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

Microsoft.Net.Httpを検索し、最終的にはInstallを選択し、Manage NuGet Packagesを選択し、プロジェクトのコマンドラインまたは右クリックを経由して、これを追加します。あなたはここでパッケージ情報を見つけることができます。

パッケージマネージャコンソールを使用すると、次のコマンドを使用してこのパッケージをプロジェクトに追加できます。

Install-Package Microsoft.Net.Http 
関連する問題