我已经开始使用RestSharp来调用webapi项目,因为它看起来很容易使用。
我想为我的所有粗暴行为建立一个帮助类。
到目前为止,我有一个简单的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;
}
所以上面的代码可以工作但是我必须将我的viewmodel硬编码到它中
var response = client.Execute<MyViewModel>(request);
我怎样才能改变这一点,所以我不需要知道我期待的模型类型?
我尝试使用var response = client.ExecuteDynamic(request);
然而,这引发了
无法将'RestSharp.RestResponse'类型的对象强制转换为'RestSharp.RestResponse`1 [System.Object
我不确定我的意思是如何正确地投射我的物体
答案 0 :(得分:5)
我不熟悉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#Generics的文档,请访问:http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx