如何在 net 6 中 return 内容类型为 json 且最小 api 的 json 字符串?

How to return a json string with content type json in net 6 and minimal api?

如果我有一个 json 字符串(例如,从文件中读取)和我的 api returns 作为字符串,Postman 会将响应视为文本

app.MapGet("/myapi", () =>
{
    var json = File.ReadAllText("file.json");
    return json;  
});

那么如何强制内容类型为 application/json? (请不要使用 Newtonsoft) 我能够使用该解决方法,但看起来很难看

app.MapGet("/myapi", () =>
{
    var json = File.ReadAllText("file.json");
    var jo = JsonSerializer.Deserialize<object>(json);
    return Results.Json(jo);
});

谢谢

您的“解决方法”是从最小 API 到 return Json 的正确方法。请参阅 Results class 中可用的方法,以获取可用响应的完整列表。

Results.Json() 是对 return Json 的正确回应。 IMO,你的第二种技术不是 “丑陋”,而是读取和反序列化 Json 的正确方法。不要担心将 Json 反序列化为一个对象只是为了再次序列化它的性能——如果它成为一个问题,你可以在那个时候解决它。如果您需要在 return 之前修改 json 怎么办?无论如何,您都需要反序列化它。

我还要补充一点,理想情况下你会反序列化为定义的 class 而不是 object:

var jo = JsonSerializer.Deserialize<CustomClass>(json);

解决方法

但是,您可以使用Results.Text()并指定content-type:

return Results.Text(json, contentType: "application/json");

在 Postman 中产生的结果与:

return Results.Json(jo);