2016-07-11 1 views
7

UWP/UAP 응용 프로그램 내에서 ASP.NET Core WebAPI를 사용하는 방법을 이해하려고합니다. WCF 서비스를 사용하는 것과 비슷한 WebAPI를 사용할 수있을 것이라고 생각했지만 아직 그것에 대해 아무것도 알지 못했습니다.C# UWP 응용 프로그램에서 ASP.NET Core WebAPI를 사용하는 방법은 무엇입니까?

또한 Microsoft.AspNet.WebApi.Core를 설치하려고했지만 UAP (버전 = V10.0)와 호환되지 않으므로 성공하지 못했습니다.

나는 조금 잃었습니다. 아마도 누군가 UWP 응용 프로그램에서 WebApi를 사용하는 방법에 대한 힌트를 줄 수 있습니다.

+0

ASP.NET 핵심 WebAPI는 WCF와 다릅니다. WCF처럼 표준 방식을 사용하지 않기 때문에 WebAPI 끝점을 사용하기 위해 자동으로 생성 된 클라이언트가 없습니다. ASP.NET은 HTTP를 프로토콜로 사용하므로 WebClient 또는 유사한 HTTP 요청을 보내고 JSON 또는 XML의 구문 분석 응답을 개체로 보내고 비즈니스 논리를 수행 할 수 있습니다. – NickAb

답변

5

이는 API 호출을 소비하는 것과 같습니다. 단순히 HttpClient 클래스를 사용하여 엔드 포인트를 호출하고 응답을 처리하면 예상되는 동작에는 차이가 없습니다.

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!' }" 
     } 
    } 
} 
: 5000 '는 다음 작업을 수행 할 수 있습니다 :

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; } 
} 

이 로컬 호스트`에서 호스팅되었습니다 가정하면 :

이 같은 정의 된 ASP.NET 코어 웹 API 엔드 포인트를 상상해

또한 강력하게 형식화 된 개체로 역 직렬화 할 수도 있습니다 (Newtonsoft.Json). 나는이 일을하는 UWP 애플 리케이션의 예를 가지고있다 here.

+0

고맙습니다. 그것이 내가 필요한 설명이다. 어제 저는 UWP에서 어떻게 할 것인지에 대한 설명을 이미 발견했습니다. 가장 큰 문제는 WinRT에서 사용할 수있는 HttpClient 클래스가 있다는 것을 알지 못한다는 것입니다. 어떻게 든 ASP.NET Core를 내 UWP 응용 프로그램에 참조해야한다고 생각했습니다. – Chris

+0

다음 코드 스 니펫에 대한 주제 질문이 있습니다. ** public Task Greeting() => Task.FromResult (새 GreetingResult {Message = "Hello world!"}); **. 저는 이런 종류의 작업을 대리인에게 할당하는 것을 보지 못했습니다 (?). 이 인사말()은 무엇입니까? 이 어리석은 질문을 용서하십시오. – Chris

+0

@Chris 나는 당신이 대답을 upvote하고 받아들이기를 기대하고 있습니다. 'Greeting()'은 메소드입니다.이 멤버는 C# 6 구문으로 단순 멤버는'이동 대상 '연산자를 사용하여 표현식으로 정의 할 수 있습니다. '=>'. –

3

데이비드 파인즈의 답변은 수동으로 모든 작업을 수행하려는 경우 및/또는 허풍을 사용하지 않는 경우에 충분합니다.

ASP.NET 코어 용 Swagger (즉, Swashbuckle Swagger 6.0)를 사용하여 RESTful API를 기술하고 설명서를 생성하는 경우 Swagger 정의 파일 (swagger.json)을 사용하여 Rest Client를 생성 할 수 있습니다. 이러한 도구 중 하나는 Azure 팀에서 만든 AutoRest입니다. 이미 DotNet을 지원하는 Microsoft.Rest.ClientRuntime도 필요합니다.

아직 ASP.NET Core RTM으로 실행되는지는 잘 모르겠지만 이전 버전과 베타가 병합 된 것을 나타내는 문제가 해결되었거나 닫혔습니다.

NuGet 패키지는 내가 그에게 좀 더 많은 정보를 추가합니다

5

링크 : UWP에서 웹 API를 소비하는

가장 좋은 방법은 같은 HttpClient를 사용하는 것입니다 .

다음은 도움이 될만한 몇 가지 예입니다.

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 
} 

나중에 경우에 코드를 공유 할 수 있습니다 이러한 구현에 유의하시기 바랍니다 :

좋은 방법은 당신이 웹 API 레벨에서 수행 할 수있는 모든 작업을 수집 할 수있는 MobileServiceClient 클래스를 만드는 것입니다 예를 들어 Xamarin Android 또는 iOS와 같은 다른 플랫폼을 지원하기로 결정했습니다. 도움이되기를 바랍니다.

+0

JsonConvert는 어디에서 왔습니까? –

+1

Json.NET은 .NET 용으로 유명한 고성능 JSON 프레임 워크입니다. https://www.nuget.org/packages/newtonsoft.json/ (UWP 용). –

+0

고마워, 나는 Newtonsoft.Json이 Core에 아직 준비가되었는지 확신하지 못했다. –

관련 문제