5

非常に使いやすいと思われるため、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;
    }

したがって、上記のコードは機能しますが、ビューモデルをハードコードする必要がありました

  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 に答える