2016-07-11 5 views
7

UWP/UAPアプリケーション内でASP.NET Core WebAPIをどのように使用できるかを理解しようとしています。 私はWebAPIをWCFサービスを使うのと同じように使うことができると思っていましたが、まだそれについて何も見つかりませんでした。C#UWPアプリケーションでASP.NET Core WebAPIを使用するにはどうすればよいですか?

はさらに私はMicrosoft.AspNet.WebApi.Coreをインストールしようとしたが、それはUAP(バージョン= V10.0)と互換性がないと何も成功していません。

私は少し失われています。多分、誰かがUWPアプリケーション内でWebApiをどのように使うことができるかを私に示唆するかもしれません。

+0

ASP.NET Core WebAPIはWCFと似ていません。 WebAPIエンドポイントを消費するためのクライアントが自動的に生成されることはありません.WCFのように消費する標準的な方法はありません。 ASP.NETはプロトコルとしてHTTPを使用しているため、WebClientなどのHTTPリクエストやJSONやXMLからの解析応答をオブジェクトに送信したり、ビジネスロジックを使用したりできます。 – NickAb

答えて

5

これは、任意のAPI呼び出しを消費すると同じです。 HttpClientクラスを使用してエンドポイントを呼び出し、応答を処理するだけで、予想される動作に違いはありません。

あなたはASP.NETコアウェブAPIエンドポイントは次のように定義されていることを想像して:

public class StackoverflowController : Controller 
{  
    // I wanted to exemplify async capabilities. 
    // You'd use async/await for getting database values, etc. 
    [ 
     HttpGet, 
     AllowAnonymous, 
     Route("api/greeting") 
    ] 
    public Task<GreetingResult> Greeting() => 
     Task.FromResult(new GreetingResult { Message = "Hello world!" }); 
} 

public class GreetingResult 
{ 
    public string Message { get; set; } 
} 

これは `ローカルホスト上でホストされたと仮定すると:あなたは次のことを行うことができ5000' :

public class Consumer 
{ 
    public async Task<string> GetGreetingAsync() 
    { 
     using (var client = new HttpClient()) 
     { 
      var response = 
       await client.GetStringAsync("http://localhost:5000/api/greeting"); 
      // The response object is a string that looks like this: 
      // "{ message: 'Hello world!' }" 
     } 
    } 
} 

さらに、厳密に型指定されたオブジェクトとしてこれを逆シリアル化すると、Newtonsoft.Jsonを使用できます。私はこの非常に事をしている私のUWPアプリの例を持っていますhere。手動ですべてのものをしたいおよび/またはあなたが闊歩を使用しない場合

+0

ありがとうございます。それは私が必要とした説明です。昨日私はすでにUWPでそれを行う方法についての説明を見つけました。そして私の最大の問題は、WinRTで利用できるこのHttpClientクラスがあることを知らないことでした。どういうわけか、私のUWPアプリケーションにASP.NET Coreを参照しなければならないと思っていました。 – Chris

+0

私は次のコードスニペットに少し質問をしました:** public Task Greeting()=> Task.FromResult(新しいGreetingResult {Message = "Hello world!"}); **。私はこの種のタスクをデリゲート(?)に割り当てるのを見たことはありません。この挨拶()とは何ですか?この愚かな疑問を言いなさい。 – Chris

+0

@Chris私はあなたがアップボートして回答を受け入れることを望んでいる。 'Greeting()'はメソッドです。これはC#6のシンタックスで、単純メンバーは '移動先 '演算子を使って式として定義できます。 '=>'。 –

3

デビッド・パインズ答えは十分です。

RESTful APIの記述にSwagger(つまりASP.NETコアの場合は)を使用し、そのドキュメントを生成する場合は、スワッガー定義ファイル(swagger.json)を使用してRest Clientを生成できます。そのようなツールの1つは、Azureチームによって作成されたAutoRestです。すでにDotNetをサポートしているMicrosoft.Rest.ClientRuntimeも必要です。

私はそれがまだASP.NETコアRTMで実行する場合はわからないんだけど、そこには解決された/それは、以前のバージョンとベータ版のサポートはそれにマージ持っていたことを示す問題がクローズ。

NuGetパッケージは、私はそれにいくつかのより多くの情報を追加します

5

リンク:

UWPでWeb APIを消費する

最善の方法としてのHttpClientを使用することです前に述べた。

は、ここで私は役に立つかもしれないと思ういくつかの例です。

が良い練習はあなたがウェブAPIレベルで実行できるすべての操作を収集することができMobileServiceClientクラスを作成することです:

public class MobileServiceClient 
{ 
    //access token if you use authentication: 
    private string _accessToken; 
    //address of your Web Api: 
    private string _serviceAddress; 

    //Constructor: 
    public MobileServiceClient(string accessToken, string serviceAddress) 
    { 
     _accessToken = accessToken; 
     _serviceAddress = serviceAddress; 
    } 

//Now you can implement methods that you will invoke to perform selected operation related with Web Api: 

#region Methods 

//You can perform "Get" to retrieve object from the Web Api and then deserialize it (using Json .NET): 

public async Task<SampleClass> GetSampleClass() 
    { 
     SampleClass sampleClass= null; 
     try 
     { 
      using (HttpClient client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _accessToken); 
       var data = await client.GetAsync(string.Concat(_serviceAddress, "routeName")); 
       var jsonResponse = await data.Content.ReadAsStringAsync(); 
       if (jsonResponse != null) 
        sampleClass= JsonConvert.DeserializeObject<SampleClass>(jsonResponse); 
       return sampleClass; 
      } 
     } 

     catch (WebException exception) 
     { 
      throw new WebException("An error has occurred while calling GetSampleClass method: " + exception.Message); 
     } 
    } 

//You can perform "Get" to retrieve list of objects and then deserialize it: 

public async Task<List<SampleClass>> GetSampleClassObjects() 
    { 
     List<SampleClass> SampleClassObjectsList = null; 
     try 
     { 
      using (HttpClient client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _accessToken); 
       var data = await client.GetAsync(string.Concat(_serviceAddress, "routeName")); 
       var jsonResponse = await data.Content.ReadAsStringAsync(); 
       if (jsonResponse != null) 
        SampleClassObjectsList = JsonConvert.DeserializeObject<List<SampleClass>>(jsonResponse); 
       return SampleClassObjectsList; 
      } 
     } 

     catch (WebException exception) 
     { 
      throw new WebException("An error has occurred while calling GetSampleClassObjects method: " + exception.Message); 
     } 
    } 

//You can also "Post" some object: 

public async Task<bool> PostSomeObject(SampleClass sampleClassObject) 
    { 
     try 
     { 
      using (HttpClient client = new HttpClient()) 
      { 
       var sampleClassObjectJson = JsonConvert.SerializeObject(sampleClassObject); 
       client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _accessToken); 
       var content = new StringContent(sampleClassObjectJson, Encoding.UTF8, "application/json"); 
       HttpResponseMessage response = await client.PostAsync(string.Concat(_serviceAddress + "routeName"), content); 
       if (response.StatusCode == HttpStatusCode.OK) 
        return true; 
       else 
        throw new WebException("An error has occurred while calling PostSomeObject method: " + response.Content); 
      } 
     } 

     catch (WebException exception) 
     { 
      throw new WebException("An error has occurred while calling PostFeedback method: " + exception.Message); 
     } 
    } 
#endregion 
} 

場合、このような実装にあなたが将来的にコードを共有することができますので、予めご了承くださいたとえば、Xamarin AndroidやiOSなどの他のプラットフォームをサポートすることに決めました。 これがあなたを助けてくれることを願っています。

+0

JsonConvertはどこから来たのですか? –

+1

Json.NETは、.NET向けに人気の高い高性能JSONフレームワークです。https://www.nuget.org/packages/newtonsoft.json/(UWPでも)。 –

+0

ありがとう、私はNewtonsoft.JsonがまだCoreの準備ができているかどうか分からなかった。 –

関連する問題