2012-09-01 20 views
2

我已經開始使用RestSharp調用webapi程序,因爲它看起來很容易使用。爲RestSharp構建CRUD操作的通用幫助程序

我想爲我所有的粗暴行爲建立一個輔助類。

我對此有一個簡單的PUT請求。

public static IRestResponse Update(object objectToUpdate,string apiEndPoint) 
    { 
     var client = new RestClient(CreateBaseUrl(null)) 
     { 
      Authenticator = new HttpBasicAuthenticator("user", "Password1") 
     }; 
     var request = new RestRequest(apiEndPoint, Method.PUT); 
     request.AddObject(objectToUpdate); 
     var response = client.Execute<MyViewModel>(request); 
     //var response = client.ExecuteDynamic(request); 
     return response; 
    } 

所以上面的代碼工作不過我不得不硬編碼視圖模型我把它

var response = client.Execute<MyViewModel>(request); 

我怎樣才能改變這種做法,我不需要知道模型的我期待的類型?

我嘗試使用var response = client.ExecuteDynamic(request); 然而,這將引發的

無法轉換類型 'RestSharp.RestResponse' 的目的是鍵入一個異常「RestSharp.RestResponse`1 [System.Object的

林不知道我是如何正確投我的對象

回答

3

我不熟悉RestSharp。然而,這聽起來像泛型可以幫助你在這裏。要麼你的類或方法需要接受一個類型。例如,你的方法的簽名將變爲

public static IRestResponse Update<T>(object objectToUpdate,string apiEndPoint) 

這將使你要調用的方法爲:

Update<MyViewModel>(objectToUpdate, apiEndPoint); 

你實現想從你的具體類型更改爲:

var response = client.Execute<T>(request); 

總的來說,你可以修改你的代碼,如下所示:

public static IRestResponse Update<T>(object objectToUpdate,string apiEndPoint) 
{ 
    var client = new RestClient(CreateBaseUrl(null)) 
    { 
     Authenticator = new HttpBasicAuthenticator("user", "Password1") 
    }; 
    var request = new RestRequest(apiEndPoint, Method.PUT); 
    request.AddObject(objectToUpdate); 
    var response = client.Execute<T>(request); 
    //var response = client.ExecuteDynamic(request); 
    return response; 
} 

在C#泛型文檔可以在這裏找到:http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

+0

我不得不添加的where子句來得到這個工作:公共靜態IRestResponse執行(對象objectToUpdate,串apiEndPoint)其中T:新的() – Bleeped