2012-11-06 88 views
3

我試圖在.NET中編寫一個簡單的傳遞代理。如何使用.NET代理REST API 4

我有一些外部域(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#服務器 - > REST API服務器

下面是一個示例HTTP服務器是開源的。 http://kayakhttp.com/

+0

感謝您的回答。我是在假設C#服務器可以自己創建外部請求的情況下運行的,但事實並非如此?我已經通過RestSharp(不是在我的例子中)獲得GET和DELETE,它是POST/PUT給我的問題。 –

+0

在我的示例中,jsonInput成功捕獲了任何發佈給它的json,我想在這一點上我只需要弄清楚如何創建外部POST請求。我面對的問題是你在網上找到的所有東西都是從現有對象序列化JSON。 –

+0

對於一個真正的代理,您需要能夠進行交互並處理它,使用HTTP服務器將是最簡單的方法。合法代理只是一個偵聽HTTP服務器,然後以您的名義發起HTTP請求,然後返回結果。你可以通過創建'TcpListener'和解析頭文件的麻煩,但爲什麼要重新發明輪子。 – Walk