5

我已经开始使用 RestSharp 来调用 webapi proejct,因为它看起来很容易使用。

我想为我所有的 crud 操作建立一个助手类。

到目前为止,我有一个简单的 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;
    }

所以上面的代码有效但是我不得不将我的视图模型硬编码到它里面

  var response = client.Execute<MyViewModel>(request);

我怎样才能改变这个,所以我不需要知道我期待的模型类型?

我尝试使用var response = client.ExecuteDynamic(request); 但是这会引发异常

无法将“RestSharp.RestResponse”类型的对象转换为“RestSharp.RestResponse”1 [System.Object

我不确定我应该如何正确地投射我的对象

4

1 回答 1

6

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

于 2012-09-01T00:35:26.820 回答