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

Div*_*Dan 5 c# restsharp

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

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

goa*_*ard 6

我不熟悉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