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