You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Flurl获取.NET Core API返回的消息内容?

解决Flurl调用.NET Core API无法获取返回消息的问题

首先咱们拆解下问题:你的API确实返回了带消息的状态码,但Flurl这边只拿到了状态码元数据,没去读取响应体里的实际消息内容。下面从Flurl调用端处理和API端格式优化两部分给出解决方案:

一、Flurl调用端:直接读取响应内容

你现在已经拿到了响应对象getRespParams,只是缺了读取响应体的步骤,用以下方式就能拿到"Sorry!"这条消息:

方式1:读取纯文本格式的消息

如果保持当前API的返回方式(直接返回字符串),可以用GetStringAsync()读取响应体:

var response = await $"http://localhost:1234/api/Orders/{orderID}/SendEmail"
    .PostUrlEncodedAsync();
int statusCodeNumber = (int)response.StatusCode;
// 读取返回的消息字符串
string message = await response.GetStringAsync();

方式2:解析JSON格式的响应(推荐)

如果后续把API改成返回JSON对象,就用GetJsonAsync<T>()来解析,先定义一个简单的响应模型:

public class ApiResponse
{
    public string Message { get; set; }
}

然后调用时解析:

var response = await $"http://localhost:1234/api/Orders/{orderID}/SendEmail"
    .PostUrlEncodedAsync();
var apiResponse = await response.GetJsonAsync<ApiResponse>();
string message = apiResponse.Message;

二、API端:优化返回格式(更规范)

你当前的return StatusCode(500, "Sorry!")写法虽然能返回消息,但.NET Core默认可能会以text/plain格式返回字符串,或者在某些配置下包装逻辑不一致。为了更符合REST规范,建议改成以下两种方式之一:

方式1:返回统一的响应对象

定义一个通用的API响应模型,让成功/失败返回格式保持一致:

public class ApiResult
{
    public int StatusCode { get; set; }
    public string Message { get; set; }
}

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

这样返回的是标准JSON,Flurl那边用GetJsonAsync<ApiResult>()就能轻松解析。

方式2:使用.NET Core内置的ProblemDetails

这是官方推荐的错误返回方式,生成符合规范的错误响应:

[HttpPost("{orderID}/SendEmail")]
[Produces("application/json")]
public ActionResult Post(int orderID)
{
    return Problem(statusCode: 500, detail: "Sorry!");
}

返回的JSON会包含status、detail等标准字段,Flurl那边可以直接解析成ProblemDetails类型(需引用Microsoft.AspNetCore.Mvc命名空间):

var problemDetails = await response.GetJsonAsync<ProblemDetails>();
string message = problemDetails.Detail;

总结:你之前拿不到消息的原因

PostUrlEncodedAsync()方法只会发送请求并获取响应的元数据(比如状态码、请求头),不会自动读取响应体内容。必须显式调用GetStringAsync()、GetJsonAsync()这类方法,才能拿到响应体里的消息。

内容的提问来源于stack exchange,提问作者boilers222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:49:30