Получить и опубликовать в ASP.NET Blazor - PullRequest
0 голосов
/ 27 декабря 2018

С помощью нескольких примеров, доступных в интернете, я могу разработать приложение для размещения на блейзоре ASP.NET Core.

Но при вызове API следующим образом

 private async Task Refresh()
{
    li.Clear();
    li = await Http.GetJsonAsync<SampleModel[]>("/api/Sample/GetList");
    StateHasChanged();
}

private async Task Save()
{  
   await Http.SendJsonAsync(HttpMethod.Post, "api/Sample/Add", obj);     
   await Refresh();
}

В строке ниже:

await Http.SendJsonAsync(HttpMethod.Post, "api/Sample/Add", obj);     

Как проверить код состояния этого HTTP-вызова?

Если при вызове API возникает какая-либо проблема, то я хочу отобразить сообщение.

Но когда я это сделаю:

 HttpResponseMessage resp = await Http.SendJsonAsync(HttpMethod.Post, "api/Sample/Add", obj);

Тогда он говорит:

не может разыграть void на HttpResponse Сообщение

IЯ использую следующие методы:

GetJsonAsync() // For HttpGet
SendJsonAsync() // For HttpPost And Put
DeleteAsync() // For HttpDelete  

Как я могу проверить код состояния здесь?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Попробуйте это:

 var response = await Http.SendJsonAsync <HttpResponseMessage>(HttpMethod.Post, "api/Sample/Add", obj);
0 голосов
/ 27 декабря 2018

Дело в том, что вы используете расширения Blazor HttpClientJsonExtensions,

, которые внутренне обычно вызывают

public static Task SendJsonAsync(this HttpClient httpClient, HttpMethod method, string requestUri, object content)
    => httpClient.SendJsonAsync<IgnoreResponse>(method, requestUri, content);

public static async Task<T> SendJsonAsync<T>(this HttpClient httpClient, HttpMethod method, string requestUri, object content)
{
    var requestJson = JsonUtil.Serialize(content);
    var response = await httpClient.SendAsync(new HttpRequestMessage(method, requestUri)
    {
        Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
    });

    if (typeof(T) == typeof(IgnoreResponse))
    {
        return default;
    }
    else
    {
        var responseJson = await response.Content.ReadAsStringAsync();
        return JsonUtil.Deserialize<T>(responseJson);
    }
}

GET-запросы используют HttpContext.GetStringAsync внутренне

public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri)
{
    var responseJson = await httpClient.GetStringAsync(requestUri);
    return JsonUtil.Deserialize<T>(responseJson);
}

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

Эти методы расширения просто заключают вызовы HttpClient по умолчанию.

Если вы хотите иметь доступ к статусу ответа, вам нужно написать свои собственные обертки, которые предоставляют желаемую функциональность или просто использовать API по умолчанию

...