Как использовать PostAsJsonAsyn c в качестве универсальной c функции? - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно написать вспомогательный метод, который будет повторно использоваться для любого объекта класса. Короче, мне нужно сделать PostAsJsonAsyn c метод generi c. Прямо сейчас это выглядит так:

public HttpResponseMessage POSTRequest(StudentViewModel student)
{
    using (var client = new System.Net.Http.HttpClient())
    {
        client.BaseAddress = new Uri(_BaseAddress);

        var postTask = client.PostAsJsonAsync<StudentViewModel>("student", student);
        postTask.Wait();

        var result = postTask.Result;

        return result;
    }
}

Если я использую его, как описано выше, мне нужно писать его для каждого запроса другого объекта viewmodel. Как я могу переписать его так, чтобы он действовал как обобщенный c метод для всех запросов POST?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

вы должны быть в состоянии сделать это так:

public HttpResponseMessage PostRequest<T>(T value)
{
    using (var client = new System.Net.Http.HttpClient())
    {
        client.BaseAddress = new Uri(_BaseAddress);

        var postTask = client.PostAsJsonAsync<T>("student", value);
        var result = postTask.Result; // Task.Result waits for the result: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1.result?view=netframework-4.8
        return result;
    }
}

или asyn c вот так:

public async HttpResponseMessage PostRequestAsync<T>(T value)
{
    using (var client = new System.Net.Http.HttpClient())
    {
        client.BaseAddress = new Uri(_BaseAddress);
        return await client.PostAsJsonAsync<T>("student", value);
    }
}

я не видел каких-либо ограничений типа на PostAsJsonAsyn c так что должно быть нормально без where T : class

0 голосов
/ 10 февраля 2020

Вы можете попробовать вот так. Предпочитает использовать async await

async Task<HttpResponseMessage> 
                  PostGenericMessage<T>(string apiEndpoint, T typeofYourClass) where T : class
{

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("uri");

        var postTask = client.PostAsJsonAsync(apiEndpoint, typeofYourClass);
        return await postTask;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...