Создайте универсальный помощник для RestSharp для операций CRUD.

Я начал использовать 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

Я не уверен, как я должен правильно передать свой объект


person Diver Dan    schedule 01.09.2012    source источник


Ответы (1)


Я не знаком с 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# Generics можно найти здесь: http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

person goatshepard    schedule 01.09.2012
comment
Мне пришлось добавить предложение where, чтобы заставить это работать: public static IRestResponse Execute‹T›(object objectToUpdate, string apiEndPoint) where T : new() - person Bleeped; 23.03.2016