Использование обработчика событий работает, но я думаю, что это лучше для сквозных задач, таких как ведение журнала, когда вы не хотите загромождать основной поток вашего приложения. В основном вы хотите разрешить и / или обработать 400 ответов как часть этого основного потока. Вы можете сделать это более напрямую с помощью AllowHtttpStatus , который может быть установлен на клиенте:
cli.AllowHtttpStatus(HttpStatusCode.BadRequest);
или запросом:
var httpResponse = await cli
.Request(uri)
.AllowHttpStatus(HttpStatusCode.BadRequest)
.PostJsonAsync(data);
В любом случае вызов не будет выдавать 400.
Еще один способ сделать это, и я бы порекомендовал, если ваше приложение logi c принимает совершенно другой путь при условии ошибки, чем при условии успеха, - это сохранить ваш try/catch
на месте и используйте свойство Response
исключения для обработки условия ошибки:
try
{
await cli.Request(uri).PostJsonAsync(data);
// handle success condition
}
catch (FlurlHttpException ex) when (ex.Response?.StatusCode == 400)
{
var errorMessage = ex.Response.GetHeaderValue("errorMessage");
// handle error condition
}
В качестве примечания, в версии 3.0 появятся некоторые важные изменения, о которых вы должны знать поскольку они касаются некоторых из этих областей напрямую:
https://github.com/tmenier/Flurl/issues/354
https://github.com/tmenier/Flurl/issues/488