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

10-08 13:31
查看更多