Как получить сообщение от API, использующего Flurl? - PullRequest
0 голосов
/ 31 мая 2018

Я создал API в .NET Core 2, используя C #.Возвращает ActionResult с кодом состояния и строковым сообщением.В другом приложении я вызываю API с помощью Flurl.Я могу получить кодовый номер статуса, но не могу найти способ получить сообщение.Как я могу получить сообщение или что мне нужно изменить в API, чтобы сообщение каким-то образом могло его получить, Flurl может его получить?

Вот код для API.«Message» в этом примере - «Извините!».

[HttpPost("{orderID}/SendEmail")]
[Produces("application/json", Type = typeof(string))]
public ActionResult Post(int orderID)
{
    return StatusCode(500, "Sorry!");
}

Вот код в другом приложении, вызывающем API.Я могу получить номер кода состояния (500) с помощью (int)getRespParams.StatusCode и текст кода состояния (InternalError) с помощью getRespParams.StatusCode, но как я могу получить «Извините!»сообщение?

var getRespParams = await $"http://localhost:1234/api/Orders/{orderID}/SendEmail".PostUrlEncodedAsync();
int statusCodeNumber = (int)getRespParams.StatusCode;

1 Ответ

0 голосов
/ 31 мая 2018

PostUrlEncodedAsync возвращает объект HttpResponseMessage.Чтобы получить тело в виде строки, просто сделайте следующее:

var message = await getRespParams.Content.ReadAsStringAsync();

Следует отметить, что Flurl по умолчанию генерирует исключение для ответов, отличных от 2XX.(Это настраивается ).Часто код состояния вас волнует только в случае неудачного вызова, поэтому типичным шаблоном является использование блока try / catch:

try {
    var obj = await url
        .PostAsync(...)
        .ReceiveJson<MyResponseType>();
}
catch (FlurlHttpException ex) {
    var status = ex.Call.HttpStatus;
    var message = await ex.GetResponseStringAsync();
}

Одним из преимуществ здесь является то, что вы можете использовать Flurl's ReceiveJson, чтобы получитьТело ответа непосредственно в успешных случаях, и получить тело ошибки (которая имеет другую форму) отдельно в блоке catch.Таким образом, вы вообще не имеете дело с десериализацией «необработанного» * ​​1014 *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...