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

ASP.NET Core:如何用Results.Ok返回字符串时强制设置text/plain?

解决.NET Core 6最小API中Results.Ok返回text/plain的问题

直接修改context.Response.ContentType会被Results.Ok()内部逻辑覆盖,因为它会自动将内容类型设为application/json。以下是两种符合你需求的方案:

方案一:用Results.Text模拟Ok响应

Results.Text支持自定义内容类型和HTTP状态码,完全可以替代Results.Ok实现需求:

using System.Text.Json;

app.MapGet("/example", () =>
{
    var data = new { Id = 1, Name = "Test" };
    var jsonString = JsonSerializer.Serialize(data);
    return Results.Text(jsonString, "text/plain", statusCode: StatusCodes.Status200OK);
});

这种方式既保留了使用Results的习惯,又能返回200 OK状态码和text/plain的内容类型,效果和直接返回data一致。

方案二:自定义Results扩展方法(提升复用性)

如果多个接口都需要这个逻辑,可以封装扩展方法简化调用:

using System.Text.Json;
using Microsoft.AspNetCore.Http;

public static class ResultExtensions
{
    public static IResult OkAsPlainText<T>(this T data)
    {
        var jsonString = JsonSerializer.Serialize(data);
        return Results.Text(jsonString, "text/plain", statusCode: StatusCodes.Status200OK);
    }
}

使用时直接调用扩展方法即可:

app.MapGet("/example", () =>
{
    var data = new { Id = 1, Name = "Test" };
    return data.OkAsPlainText();
});

补充说明

Results.Ok()内部会创建JsonResult实例,该实例执行时会重新设置Response.ContentType为application/json,所以你提前设置的内容类型会被覆盖。而Results.Text是基于文本内容直接构建响应,不会覆盖指定的内容类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:35:34