2017-10-24 3 views
-3

나는 모든 webApi 메소드를 아약스 요청으로 호출 할 수 있지만 C#에서는이를 수행 할 수 없다. 이것은 모든 신체가 asp.net mvc web api에서 만들 수있는 간단한 웹 API이지만 호출에 대한 예제를 찾을 수없고 프로그래밍 방식으로 C#으로 가져올 수 없습니다.C에서 웹 API 또는 기타 편리한 웹 서비스를 호출하는 방법 #

public class TestController : ApiController 
{ 
    // GET: api/Test 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 
} 

일부 신체는 제 말을 어떻게하면 C#에서이 웹 API를 호출하여이 2 가지 값을 얻을 수 있습니까? C#에서 웹 서비스 (RestFull- 참조 없음)를 통해 가치를 얻을 수있는 방법은 무엇입니까?

+0

HTTP 요청을 만드는 데 사용할 수있는 몇 가지 구체적인 .NET 클래스가 있습니다. 또는 실제로 프로세스의 내장에 들어가기를 원한다면 자신의 HTTP 클라이언트를 빌드 할 수도 있습니다. 가능성은 끝이 없습니다. 당신은 무엇을 연구하고 시도 했습니까? 인터넷을 통해 쉽게 찾을 수있는 온라인 예제 및 설명서가 많이 있습니다. – ADyson

+1

[HTTP POST 웹 요청 방법] (https://stackoverflow.com/questions/4015324/how-to-make-http-post-web-request) – adiga

+0

의 가능한 복제본 [Stack에 대한 많은 연구 노력이 예상됩니다. 오버 플로우 사용자?] (https://meta.stackoverflow.com/a/261593/3082296) – adiga

답변

-1

HttpClient (https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.118).aspx)를 만들고 GetAsync() https://msdn.microsoft.com/en-us/library/hh158912(v=vs.118).aspx 메서드를 호출하십시오. 로컬에서 실행 중이므로 Fri를 누를 때 Visual Studio가 구성되는 방법에 따라 Uri가 http://localhost/test/get과 같은 것일 수도 있습니다. 다음은 완전한 예제입니다 : https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client

2

웹 API를 C#에서 호출하려면 HttpClient 클래스를 사용할 수 있습니다.

 string GET(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     try 
     { 
      WebResponse response = request.GetResponse(); 
      using (Stream responseStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
       return reader.ReadToEnd(); 
      } 
     } 
     catch (WebException ex) 
     { 
      WebResponse errorResponse = ex.Response; 
      using (Stream responseStream = errorResponse.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
       String errorText = reader.ReadToEnd(); 
       // log errorText 
      } 
      throw; 
     } 
    } 

너무 쉽게 :

public class Client 
{ 
    private readonly string baseUri; 
    private static HttpClient _client; 

    public Client(string baseUri) 
    { 
     this.baseUri = baseUri; 

     _client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }) 
     { 
      BaseAddress = new Uri(baseUri) 
     }; 

     _client.DefaultRequestHeaders.Accept.Clear(); 
     _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    } 

    public async Task<SomeResource> GetResourceById(int Id) 
    { 
     var path = $"{baseUri}/Resources/{Id}"; 

     var response = await _client.GetAsync(path); 

     return await response.Content.ReadAsAsync<SomeResource>();   
    } 
1

대답은 부정적 반응 대신에이 작업을 수행 할 수 있습니다 부정적 반응을 줄이 ... 모든 사람입니다!