2013-11-03 86 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