我使用C#在.NET Core 2中创建了一个API。它返回带有状态代码和字符串消息的ActionResult
。在另一个应用程序中,我使用Flurl调用API。我可以获取状态代码,但我找不到获取消息的方法。如何获取消息或我需要在API中进行哪些更改才能将消息传递给Flurl以获取它?
这是API的代码。 "消息"在这个例子中是#34;抱歉!"。
[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;
答案 0 :(得分: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块中单独获取错误主体(这是一个不同的形状)。这样你就不会处理反序列化&#34; raw&#34;完全HttpResponseMessage
。