如何使用RESTSharp发送HTTP LINK动词请求API?

3
我正在开发一个Windows Phone 8应用程序,使用REST API并使用著名的库"RESTSharp"请求API服务。我的问题是,REST API公开了一个需要使用HTTP LINK动词的方法,我无法找到任何与RESTSharp一起使用此动词的相关内容(更不用说如此通用的术语“link”)。如果有人能给我一些建议或指引方向,那将非常友善。欢迎进一步询问细节。
2个回答

4

起初,我认为使用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");

目前,RestSharp API不支持WP8应用程序上的ExecuteAsGet()。 在RestClient类中似乎存在一个HttpFactory。没有文档可供阅读,但我会研究一下。 - Invvard
1
这些方法应该在WP8中有异步版本可用。我已经更新了我的答案。 - Brian Rogers
感谢您提供的详细信息,“ExecuteAsyncGet”是执行“LINK”请求的赢家! - Invvard

1

在一段时间之前,已经添加了对非标准方法的支持。您可以执行以下操作:

restClient.ExecuteAsPost(restRequest, "LINK") 

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

我个人认为这是一个糟糕的API。新的HttpClient具有更好的非标准方法API。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接