为CRUD操作构建RestSharp的通用帮助程序

时间:2012-09-01 00:04:32

标签: c# restsharp

我已经开始使用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

我不确定我的意思是如何正确地投射我的物体

1 个答案:

答案 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