我正在构建一个使用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;
}
谢谢!