如何将假的ASP.NET WebMethod HTTP代理转换为真正的代理?

时间:2012-06-18 22:26:21

标签: c# asp.net jquery webclient http-proxy

我正在构建一个使用AJAX与RESTful API进行通信的富Web客户端。为了解决跨域浏览器限制,我在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:

[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;
}

谢谢!

0 个答案:

没有答案