boi*_*222 3 api api-design http-status-codes flurl asp.net-core
我已经使用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!");
}
Run Code Online (Sandbox Code Playgroud)
这是另一个调用API的应用程序中的代码。我可以使用获取状态代码编号(500),(int)getRespParams.StatusCode并使用获取状态代码文本(InternalError)getRespParams.StatusCode,但是如何获得“抱歉!” 信息?
var getRespParams = await $"http://localhost:1234/api/Orders/{orderID}/SendEmail".PostUrlEncodedAsync();
int statusCodeNumber = (int)getRespParams.StatusCode;
Run Code Online (Sandbox Code Playgroud)
PostUrlEncodedAsync返回一个HttpResponseMessage对象。要将主体作为字符串,只需执行以下操作:
var message = await getRespParams.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
要注意的一件事是,默认情况下,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();
}
Run Code Online (Sandbox Code Playgroud)
这里的一个优点是,ReceiveJson在成功的情况下,您可以使用Flurl 直接获取响应主体,并在catch块中单独获取错误主体(形状不同)。这样,您根本不需要处理反序列化“原始”操作HttpResponseMessage。
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |