如何在 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);
如果我有一个 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);