我已经开始使用RestSharp调用webapi proejct,因为它看起来很容易使用.
我想为我的所有粗暴行为建立一个帮助类.
到目前为止,我有一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)
所以上面的代码工作,但我不得不将我的viewmodel硬编码到它
var response = client.Execute<MyViewModel>(request);
Run Code Online (Sandbox Code Playgroud)
我怎么能改变这个,所以我不需要知道我期待的模型类型?
我试过使用var response = client.ExecuteDynamic(request);
然而这引发了一个例外
无法将类型为'RestSharp.RestResponse'的对象强制转换为'RestSharp.RestResponse`1 [System.Object
我不确定我的意思是如何正确地投射我的物体
我不熟悉RestSharp.但是,听起来仿制药可以帮助你.您的类或方法需要接受类型.例如,您的方法的签名将更改为
public static IRestResponse Update<T>(object objectToUpdate,string apiEndPoint)
Run Code Online (Sandbox Code Playgroud)
这将允许您将方法调用为:
Update<MyViewModel>(objectToUpdate, apiEndPoint);
Run Code Online (Sandbox Code Playgroud)
您的实现将从您的具体类型更改为:
var response = client.Execute<T>(request);
Run Code Online (Sandbox Code Playgroud)
总的来说,您可以将代码修改为以下内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
有关C#Generics的文档可以在这里找到:http://msdn.microsoft.com/en-us/library/ms379564( v = vs.80).aspx