2013-11-03 61 views
3

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

我的问题是REST API暴露了需要使用HTTP LINK verb的方法,我无法找到任何与RESTSharp使用此谓词相关的任何内容(甚至更多地使用如此通用的术语“链接”)。

所以,如果有人可以给我一些建议,或只是指出我在正确的方向,那将是非常友善的你。

随时要求进一步的细节。

回答

4

最初,我以为没有办法使用RestSharp来做到这一点,因为IRestRequest接口使用Method枚举来表示HTTP方法。但是,似乎RestSharp确实支持通过RestClient类中的ExecuteAsGet<T>ExecuteAsPost<T>方法使用非标准HTTP动词。您使用哪种方法取决于非标准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); 

UPDATE

看来你是对的,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"); 
+0

现在,对于WP8应用程序,RestSharp API不支持ExecuteAsGet()。 有一个似乎存在于RestClient类中的HttpFactory。没有可读的文件,但我会研究它。 – Invvard

+1

在WP8中应该可以使用这些方法的异步版本。我已经更新了我的答案。 –

+0

感谢您提供这些细节,“ExecuteAsyncGet”是执行“LINK”请求的赢家! – Invvard

1

支持非标准方法中加入而back。你可以这样做:

restClient.ExecuteAsPost(restRequest, "LINK") 

或使用ExecuteAsGet。基本上,您使用一个或另一个基于您是否传递查询字符串或请求正文。

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

+0

@Invvard - 我正在谈论RestSharp API。对不起,并没有真正专注于WP8标签。 – manojlds