Я использую GetFromJsonAsync и ReadAsStringAsync в C#. Если я введу URL-адрес, который вернет 404, исключения не будет, и он просто зависнет.
Все 3 приведенные ниже функции просто зависают по запросу. Как мне вызвать какое-то исключение (или что-то еще), если ответ не такой, как ожидалось?
private static HttpClient apiClient = new HttpClient() { BaseAddress = new Uri ("https://httpbin.org/") };
public static async Task TestRequest()
{
using HttpResponseMessage response = await apiClient.GetAsync("/bad/path");
response.EnsureSuccessStatusCode();
var jsonResponse = await response.Content.ReadAsStringAsync();
Console.WriteLine($"{jsonResponse}");
}
@DanielA.White они вызываются в основной функции и не возвращают исключений. Я их сознательно не жду, потому что мне не нужно, чтобы их ждали c# APIManager.TestRequest(); APIManager.RequestJson(); APIManager.Request<SessionCreateResponse>("/bad/request/path");
похоже, ты им не await
@DanielA.White Я сказал в комментарии, что это было сделано намеренно. Если я не добавлю URL-адрес, который возвращает 404, все будет работать так, как задумано.





у вас есть несколько вариантов, вы можете получить код состояния и в зависимости от статуса выдать обработанное исключение и добавить блок try-catch для перехвата внутренних исключений
private static HttpClient apiClient = new HttpClient() { BaseAddress = new Uri("basePath") };
public static async Task TestRequest()
{
try
{
using HttpResponseMessage response = await apiClient.GetAsync("path");
//An option to EnsureSuccessStatusCode is to capture the status code and throw a custom exception.
//if (response.StatusCode != System.Net.HttpStatusCode.OK)
//{
// thorw new Exception($"{response.StatusCode}, response.Message");
//}
response.EnsureSuccessStatusCode();
var jsonResponse = await response.Content.ReadAsStringAsync();
...
}
catch (HttpRequestException ex)
{
Console.WriteLine($"error completing request : {ex.Message}");
}
}
Он все еще висит на apiClient.GetAsync(...) Обновлено: неважно, это работает, спасибо!
Я тот, кто благодарит.
где вы называете эти вещи? если они потерпят неудачу, они выдадут исключение