6

我正在尝试在.NET 中编写一个简单的直通代理。

我有一个托管在某个外部域(http://exampleapi.com)的 REST api,

我想通过发送到我的应用程序的所有请求(获取、发布等)。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");
}
4

1 回答 1

2

您需要创建一个 HTTP 服务器,接收请求,然后您的代码将从该请求中提取信息,并向新服务器生成一个新请求,接收响应,然后将响应发送回原始客户端.

客户端 -> C# 服务器 -> Rest API 服务器

这是一个开源的示例 HTTP 服务器。 https://github.com/kayakhttp/kayak

于 2012-11-06T23:17:15.650 回答