我正在开发一个Windows Phone 8应用程序,使用REST API并使用著名的库"RESTSharp"请求API服务。我的问题是,REST API公开了一个需要使用HTTP LINK动词的方法,我无法找到任何与RESTSharp一起使用此动词的相关内容(更不用说如此通用的术语“link”)。如果有人能给我一些建议或指引方向,那将非常友善。欢迎进一步询问细节。
起初,我认为使用RestSharp没有办法实现这一点,因为IRestRequest
接口使用一个Method
枚举来表示HTTP方法。然而,事实上RestSharp确实支持使用非标准的HTTP动词,可以通过RestClient
类上的ExecuteAsGet<T>
和ExecuteAsPost<T>
方法来实现。您使用哪种方法取决于非标准HTTP方法的语义。如果请求有主体(或HTTP术语中的“实体”),则应使用ExecuteAsPost
; 如果没有,则应使用ExecuteAsGet
。
以下是一些示例代码,演示如何使用RestSharp进行LINK请求,基于您问题中引用的草案中的一个示例。
RestClient client = new RestClient("http://example.org");
RestRequest request = new RestRequest("/images/my_dog.jpg");
request.AddHeader("Link", "<http://example.org/profiles/joe>; rel=\"tag\"");
IRestResponse response = client.ExecuteAsGet(request, "LINK");
Debug.WriteLine((int)response.StatusCode + " " + response.StatusDescription);
更新
看起来你是正确的,WP8项目不包含RestClient.Sync.cs
,其中包含同步ExecuteAsGet<T>
和ExecuteAsPost<T>
方法。 然而,有异步版本,ExecuteAsyncGet<T>
和ExecuteAsyncPost<T>
应该在WP8中可用。这两者都接受一个字符串httpMethod
参数。
client.ExecuteAsyncGet(request, (response, handle) =>
{
Debug.WriteLine((int)response.StatusCode + " " + response.StatusDescription);
},
"LINK");
在一段时间之前,已经添加了对非标准方法的支持。您可以执行以下操作:
restClient.ExecuteAsPost(restRequest, "LINK")
或者使用ExecuteAsGet
。基本上,您根据是否传递查询字符串或请求正文来使用其中之一。
我个人认为这是一个糟糕的API。新的HttpClient
具有更好的非标准方法API。