net 6和minimal API中如何返回内容类型为json的json字符串?

3phpmpom  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(422)

如果我有一个json字符串(例如,从一个文件中读取),并且我的API返回字符串,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);
});

谢谢

hiz5n14c

hiz5n14c1#

您的“解决方法”是从最小API返回Json的正确方法。请查看Results类中可用的方法,以获得可用响应的完整列表。
Results.Json()是返回Json. IMO的正确响应,您的第二个技术并不“丑陋”,但是读取和反序列化Json的正确方法。不要担心将Json反序列化为对象只是为了再次序列化它的性能--如果它成为一个问题,您可以在此时解决它。如果您需要在返回它之前修改它,该怎么办?您可以在这种情况下,我们无论如何都需要反序列化它。
我还要补充一点,理想情况下,您应该反序列化为一个定义的类,而不是object

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

解决方法

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

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

它在Postman中产生的结果与:

return Results.Json(jo);
5m1hhzi4

5m1hhzi42#

正确答案是:

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

@haldo的回答是不正确的,因为他说这是一个变通方法,但实际上不是。您已经有了JSON,并且希望输出相同的JSON而不做任何更改,您只是想告诉浏览器这是JSON。因此,这里没有变通方法,只是输出JSON内容的正确方法。

相关问题