我已经开始使用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);
但这引发了一个异常(exception)我不确定我该如何正确转换对象
最佳答案
我对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