Получить и опубликовать в ASP.NET Blazor
С помощью нескольких примеров, доступных в Интернете, я могу разработать приложение на базе ASP.NET Core Hosted Blazor.
Но при вызове 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);
Тогда это говорит:
не может опустошить
HttpResponse
Сообщение
Я использую следующие методы:
GetJsonAsync() // For HttpGet
SendJsonAsync() // For HttpPost And Put
DeleteAsync() // For HttpDelete
Как я могу проверить код статуса здесь?
2 ответа
Дело в том, что вы используете Blazor's 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 по умолчанию.
Попробуй это:
var response = await Http.SendJsonAsync <HttpResponseMessage>(HttpMethod.Post, "api/Sample/Add", obj);