0

我正在构建一个富 Web 客户端,它使用 AJAX 与 RESTful API 进行通信。为了绕过跨域浏览器限制,我在 C# 和 ASP.NET 中编写了一个超级简单(但假的)HTTP 代理,以便我在http://localhost上的客户端应用程序可以与http://restful.api.com 通信

其他人会用 Java 编写一个“适当的”代理,所以我最初的任务是“保持简单”。我当前的版本只是一个静态的 ASP.NET [WebMethod],它根据字符串数组中的值盲目地创建一个 URL 和可选的 QueryString。

对于 GET、POST 和 PUT 操作,我创建了System.Net.WebClient()的一个实例,然后调用client.downloadString(...)client.UploadData(...)。该方法返回一个字符串,因此我丢失了 RESTful API 返回的所有标头和响应代码。

这很好上手,但现在我需要转换为一个成熟的代理,它可以处理标头、响应代码、有效负载以及您使用真正的代理获得的任何其他内容。

是否可以改造下面的代码片段,或者我需要从头开始重写一些东西?

这是网络方法:

[WebMethod]
public static string rest(string[] values, string[] queryStringParams, string verb, string jsonData)
{
    string r = WebAppUtils.UnifiedMessagingApi(values, queryStringParams, verb, jsonData);

    return r;
}

这是工作者方法(仅显示 GET 和 POST)。对不起,我试图为这个问题尽可能多地修剪掉绒毛。)

public static string UnifiedMessagingApi(string[] values, string[] queryStringParams, string verb, string jsonData)
{
    var r = String.Empty;

    var query = String.Format("{0}{1}", BaseUrl, String.Join("/", values));

    if (queryStringParams.Length > 0)
    {
        var queryString = String.Join("&", queryStringParams);

        query = query + "?" + queryString;
    }

    using (var client = new WebClient())
    {
        client.Encoding = Encoding.UTF8;
        client.Headers.Add("Content-Type","application/json; charset=utf-8");

        client.Proxy = null;

        switch (verb)
        {
            case HttpVerb.GET:
                try
                {
                    r = client.DownloadString(query);
                }
                catch (WebException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Status);
                }
                break;

            case HttpVerb.POST:
                try
                {
                    var encoding = new System.Text.UTF8Encoding();
                    Byte[] data = encoding.GetBytes(jsonData);

                    // Call the REST API
                    Byte[] retValBytes = client.UploadData(query, verb, data);

                    // Convert the byte array to a string
                    r = System.Text.UTF8Encoding.Default.GetString(retValBytes);
                }
                catch (WebException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Status);
                }
                break;
        }
    }

    return r;
}

谢谢!

4

0 回答 0