C# 如何用.NET4代理RESTAPI
我正在尝试在.NET中编写一个简单的直通代理 我在某个外部域中托管了一个RESTAPI(http://exampleapi.com), 我希望传递发送到我的应用程序的所有请求(get、post等)。JSONP不是一个选项 所以如果我要求C# 如何用.NET4代理RESTAPI,c#,.net,C#,.net,我正在尝试在.NET中编写一个简单的直通代理 我在某个外部域中托管了一个RESTAPI(http://exampleapi.com), 我希望传递发送到我的应用程序的所有请求(get、post等)。JSONP不是一个选项 所以如果我要求GET localhost:1234/api/pages=>GEThttp://exampleapi.com/pages 同样,如果我发布localhost:1234/api/pages=>POSThttp://exampleapi.com/pages 我遇到的最
GET localhost:1234/api/pages
=>GEThttp://exampleapi.com/pages
同样,如果我发布localhost:1234/api/pages=>POSThttp://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");
}
您需要创建一个HTTP服务器,接收请求,然后代码将从该请求中提取信息,并向新服务器生成一个新请求,接收响应,然后将响应发送回原始客户端 客户端->C#服务器->Rest API服务器
下面是一个开源的HTTP服务器示例 谢谢你的回答。我是在C#server可以自己发出外部请求的假设下运行的,但事实并非如此吗?我已经通过RestSharp实现了get和DELETEs(不是在我的示例中),这是POST/PUT给我带来的问题。在我的示例中,jsonInput成功捕获了我发布到它的任何json,我想现在我只需要弄清楚如何发出外部POST请求。我面临的问题是,你在网上找到的所有东西都是在处理从现有对象序列化JSON的问题。对于真正的代理,你需要能够进行交互并处理它,使用HTTP服务器将是最简单的方法。合法代理只是一个侦听HTTP服务器,然后代表您发出HTTP请求,然后返回结果。创建一个
TcpListener
并解析出标题可能会很麻烦,但为什么要重新发明轮子呢?对于POST消息,您必须向请求中添加一些标题。下面是一个使用C#执行HTTP POST的示例: