HttpClient.GetJsonAsyn c Не найдено - PullRequest
1 голос
/ 21 января 2020

Я установил пакет, добавив последний пакет ref. от https://www.nuget.org/packages/Microsoft.AspNetCore.Blazor.HttpClient/ Но я все еще не могу найти нужную функцию, например .. Client.GetJsonAsync

Не могли бы вы мне помочь, если я что-то упустил? Спасибо .

Я пытаюсь здесь, но не могу.

public async Task<User> GetUser(string Id)
        {
            HttpClient client = new HttpClient();
            var user = await client.GetJsonAsync($"{BaseUrl}Get-User/{Id}");
            return JsonConvert.DeserializeObject<User>(user);
        }

Ответы [ 3 ]

1 голос
/ 21 января 2020

Сигнатура метода следующая:

public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri);

Таким образом, это метод generi c, и вам нужно будет включить аргумент типа в вызов.

В вашем случае это должно выглядеть следующим образом:

HttpClient client = new HttpClient();
var user = await client.GetJsonAsync<User>($"{BaseUrl}Get-User/{Id}");

Это уже десериализует ответ JSON на тип User.

Обратите внимание, что вам понадобится используется для пространства имен Microsoft.AspNetCore.Components, чтобы появился этот метод расширения.

0 голосов
/ 28 января 2020

1.В приложении Blazor Server, в настоящее время класс HttpClient не содержит методов «GetJsonAsync», «PostJsonAsync» и «PutJsonAsyc».

2.Вы можете создать собственный класс HttpClient, чтобы добавить эти отсутствующие методы для обработки json данных

public CustomHttpClient : HttpClient 
{  
    public async Task<T> GetJsonAsync<T>(string requestUri)  
    {  
        HttpClient httpClient = new HttpClient();  
        var httpContent = await httpClient.GetAsync(requestUri);  
        string jsonContent = httpContent.Content.ReadAsStringAsync().Result;  
        T obj = JsonConvert.DeserializeObject<T>(jsonContent);  
        httpContent.Dispose();  
        httpClient.Dispose();  
        return obj;  
    }  

    public async Task<HttpResponseMessage> PostJsonAsync<T>(string requestUri, T content)  
    {  
        HttpClient httpClient = new HttpClient();  
        string myContent = JsonConvert.SerializeObject(content);  
        StringContent stringContent = new StringContent(myContent, Encoding.UTF8, "application/json");  
        var response = await httpClient.PostAsync(requestUri, stringContent);  
        httpClient.Dispose();  
        return response;  
    }  

    public async Task<HttpResponseMessage> PutJsonAsync<T>(string requestUri, T content)  
    {  
        HttpClient httpClient = new HttpClient();  
        string myContent = JsonConvert.SerializeObject(content);  
        StringContent stringContent = new StringContent(myContent, Encoding.UTF8, "application/json");  
        var response = await httpClient.PutAsync(requestUri, stringContent);  
        httpClient.Dispose();  
        return response;  
    }  
}

3. Теперь вызовите на своей странице бритвы:

@inject CustomHttpClient Http

@code{  

    protected override async Task OnInitializedAsync() {  
        await Http.GetJsonAsync < Emp[] > ("Your Url");  
    } 

    public class Emp
    { 
        public int? ID { get; set; }
        public string EmpName { get; set; }  
    }
}
0 голосов
/ 22 января 2020

Я надеюсь, что вы используете блезор на стороне клиента

Это метод расширения HTTP Client, поэтому вам нужно передать тип с помощью GetJsonAsyn c, и метод вернет объект. Этот метод выдаст ошибку, если ваш API вернет пустой ответ. Для этого случая вы можете использовать httpClient.GetAsync метод

enter image description here

...