2012-11-06 9 views
3

.NET에서 간단한 통과 프록시를 작성하려고합니다..NET에서 REST API를 프록시하는 방법

나는

일부 외부 도메인 (http://exampleapi.com)에서 호스팅되는 REST API를 가지고 그리고 난 내 응용 프로그램 (GET, POST 등)로 전송 된 모든 요청을 통해 전달하려는. JSONP는 옵션이 아닙니다.

그래서 GET localhost:1234/api/pages을 요청하는 경우 =>GET http://exampleapi.com/pages 마찬가지로 만약 내가 POST localhost:1234/api/pages =>POST http://exampleapi.com/pages

내가 있고, 내가 다른 곳에서 찾을 수 없습니다하는 것은 큰 문제 - 내가하지을 이다 이 JSON을 구문 분석하고 싶습니다. 내가 검색 한 모든 내용은 HttpClient을 중심으로 보이지만 제대로 사용하는 방법을 찾지 못했습니다. 여기

는 지금까지이 작업은 다음과 같습니다

public ContentResult Proxy() 
{ 
    // Grab the path from /api/* 
    var path = Request.RawUrl.ToString().Substring(4); 
    var target = new UriBuilder("http", "exampleapi.com", 25001); 
    var method = Request.HttpMethod; 

    var client = new HttpClient(); 
    client.BaseAddress = target.Uri; 

    // Needs to get filled with response. 
    string content; 

    HttpResponseMessage response; 
    switch (method) 
    { 
     case "POST": 
     case "PUT": 
      StreamReader reader = new StreamReader(Request.InputStream); 
      var jsonInput = reader.ReadToEnd(); 

      // Totally lost here. 
      client.PostAsync(path, jsonInput); 

      break; 
     case "DELETE": 
      client.DeleteAsync(path); 
      break; 
     case "GET": 
     default: 
      // need to capture client data 
      client.GetAsync(path); 
      break; 
    } 

    return Content(content, "application/json"); 
} 

답변

1

당신은 HTTP 서버를 만들받을 요청을, 다음 코드는 해당 요청에서 정보를 끌어와에 새로운 요청을 생성해야합니다 새 서버를 선택하고 응답을받은 다음 원래 클라이언트로 응답을 보냅니다.

클라이언트 -> C#을 서버 -> 나머지의 API 서버

여기에 오픈 소스 샘플 HTTP 서버입니다. http://kayakhttp.com/

+0

답변 해 주셔서 감사합니다. C# 서버가 외부 요청 자체를 만들 수 있다는 가정하에 작동하지만 그럴 수 있습니까? RestSharp (내 예제가 아님)를 통해 GET 및 DELETE 작업을했는데 문제가되는 POST/PUT입니다. –

+0

예에서 jsonInput은 내가 게시 한 모든 json을 성공적으로 캡처합니다.이 시점에서 외부 POST 요청을 작성하는 방법을 알아 내야합니다. 필자가 직면 한 문제는 온라인에서 JSON을 기존 객체에서 직렬화하는 것을 다 알고 있다는 것입니다. –

+0

실제 프록시의 경우 상호 작용을 처리하고 처리 할 수 ​​있어야합니다. HTTP 서버를 사용하는 것이 가장 쉬운 방법입니다. 합법적 인 프록시는 사용자의 요청에 따라 HTTP 요청을 한 다음 결과를 반환하는 것보다 청취 HTTP 서버입니다. 'TcpListener'를 생성하고 헤더를 파싱하는 문제를 겪을 수 있지만, 왜 바퀴를 다시 만들 것인가. – Walk

관련 문제