为RestSharp构建通用的辅助类,实现CRUD操作。

5

我开始使用RestSharp调用webapi项目,因为它看起来很容易使用。

我想为所有的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

我不确定我应该如何正确地转换我的对象。

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


1
我不得不添加where子句才能使其工作:public static IRestResponse Execute<T>(object objectToUpdate, string apiEndPoint) where T : new() - Bleeped

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接