C# 如何用.NET4代理RESTAPI

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 我遇到的最

我正在尝试在.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

我遇到的最大问题是,我不想解析这个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的示例: