1

如果我有一个 json 字符串(例如从文件中读取)并且我的 api 作为字符串返回,邮递员会将响应视为文本

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);
});

谢谢

4

1 回答 1

1

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

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

我还要补充一点,理想情况下,您将反序列化为已定义的类,而不是object

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

解决方法

但是,您可以使用Results.Text()并指定内容类型:

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

在 Postman 中产生与以下相同的结果:

return Results.Json(jo);
于 2022-02-09T12:19:50.793 回答