3

我目前正在开发一个使用 REST API 的 Windows Phone 8 应用程序,并且我正在使用众所周知的库“RESTSharp”来请求 API 服务。

我的问题是 REST API 公开了一种需要使用HTTP LINK 动词的方法,而我无法找到任何与将此动词与 RESTSharp 一起使用的相关内容(使用如此通用的术语“链接”更是如此)。

因此,如果有人可以给我一些建议或只是为我指明正确的方向,那您将非常好。

随时询问更多细节。

4

2 回答 2

4

最初,我认为使用 RestSharp 没有办法做到这一点,因为IRestRequest接口使用Method枚举来表示 HTTP 方法。但是,RestSharp 似乎确实支持通过类上的ExecuteAsGet<T>andExecuteAsPost<T>方法使用非标准 HTTP 动词RestClient。您使用哪种方法取决于非标准 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");
于 2013-11-03T18:27:23.040 回答
1

不久前添加了对非标准方法的支持。你可以做:

restClient.ExecuteAsPost(restRequest, "LINK") 

或使用ExecuteAsGet. 基本上,您根据是传递查询字符串还是请求正文来使用其中一种。

我个人觉得这是一个糟糕的 API。新HttpClient的对非标准方法有更好的 API。

于 2013-11-03T19:19:47.880 回答