.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");
}
답변 해 주셔서 감사합니다. C# 서버가 외부 요청 자체를 만들 수 있다는 가정하에 작동하지만 그럴 수 있습니까? RestSharp (내 예제가 아님)를 통해 GET 및 DELETE 작업을했는데 문제가되는 POST/PUT입니다. –
예에서 jsonInput은 내가 게시 한 모든 json을 성공적으로 캡처합니다.이 시점에서 외부 POST 요청을 작성하는 방법을 알아 내야합니다. 필자가 직면 한 문제는 온라인에서 JSON을 기존 객체에서 직렬화하는 것을 다 알고 있다는 것입니다. –
실제 프록시의 경우 상호 작용을 처리하고 처리 할 수 있어야합니다. HTTP 서버를 사용하는 것이 가장 쉬운 방법입니다. 합법적 인 프록시는 사용자의 요청에 따라 HTTP 요청을 한 다음 결과를 반환하는 것보다 청취 HTTP 서버입니다. 'TcpListener'를 생성하고 헤더를 파싱하는 문제를 겪을 수 있지만, 왜 바퀴를 다시 만들 것인가. – Walk