我試圖在.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");
}
感謝您的回答。我是在假設C#服務器可以自己創建外部請求的情況下運行的,但事實並非如此?我已經通過RestSharp(不是在我的例子中)獲得GET和DELETE,它是POST/PUT給我的問題。 –
在我的示例中,jsonInput成功捕獲了任何發佈給它的json,我想在這一點上我只需要弄清楚如何創建外部POST請求。我面對的問題是你在網上找到的所有東西都是從現有對象序列化JSON。 –
對於一個真正的代理,您需要能夠進行交互並處理它,使用HTTP服務器將是最簡單的方法。合法代理只是一個偵聽HTTP服務器,然後以您的名義發起HTTP請求,然後返回結果。你可以通過創建'TcpListener'和解析頭文件的麻煩,但爲什麼要重新發明輪子。 – Walk