如何使用Flurl从API获取消息?

问题描述 投票:3回答:1

我使用C#在.NET Core 2中创建了一个API。它返回带有状态代码和字符串消息的ActionResult。在另一个应用程序中,我使用Flurl调用API。我可以获取状态代码,但我找不到获取消息的方法。如何获取消息或我需要在API中进行哪些更改才能将消息放入Flurl中获取它?

这是API的代码。此示例中的“消息”是“抱歉!”。

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

这是调用API的另一个应用程序中的代码。我可以使用(int)getRespParams.StatusCode获取状态代码编号(500)和使用getRespParams.StatusCode获取状态代码文本(InternalError),但是如何获得“抱歉!”信息?

var getRespParams = await $"http://localhost:1234/api/Orders/{orderID}/SendEmail".PostUrlEncodedAsync();
int statusCodeNumber = (int)getRespParams.StatusCode;
api asp.net-core api-design http-status-codes flurl
1个回答
5
投票

PostUrlEncodedAsync返回一个HttpResponseMessage对象。要将正文作为字符串,请执行以下操作:

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

需要注意的一点是,默认情况下,Flurl会在非2XX响应上抛出异常。 (这是configurable)。如果调用不成功,通常只关心状态代码,因此典型的模式是使用try / catch块:

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

这里的一个优点是你可以使用Flurl的ReceiveJson直接在成功案例中获取响应体,并在catch块中单独获取错误体(这是一个不同的形状)。这样你根本就没有处理反对“原始”HttpResponseMessage的反序列化。

© www.soinside.com 2019 - 2024. All rights reserved.