San*_*Riz 11 c# json asp.net-core minimal-apis
如果我有一个 json 字符串(例如从文件中读取)并且我的 api 以字符串形式返回,Postman 会将响应视为文本
app.MapGet("/myapi", () =>
{
var json = File.ReadAllText("file.json");
return json;
});
Run Code Online (Sandbox Code Playgroud)
那么如何强制内容类型为 application/json 呢?(请不要使用 Newtonsoft)我能够使用该解决方法,但看起来很丑
app.MapGet("/myapi", () =>
{
var json = File.ReadAllText("file.json");
var jo = JsonSerializer.Deserialize<object>(json);
return Results.Json(jo);
});
Run Code Online (Sandbox Code Playgroud)
谢谢
hal*_*ldo 14
您的“解决方法”是从最小 API 返回 Json 的正确方法。请参阅类中可用的方法Results以获取可用响应的完整列表。
Results.Json()是返回Json的正确响应。IMO,你的第二种技术并不“丑陋”,而是读取和反序列化 Json 的正确方法。不必担心将 Json 反序列化为对象只是为了再次序列化它的性能 - 如果它成为问题,您可以在此时解决它。如果返回之前需要修改json怎么办?无论如何,在这种情况下你需要反序列化它。
我还要补充一点,理想情况下,您应该反序列化为定义的类,而不是object:
var jo = JsonSerializer.Deserialize<CustomClass>(json);
Run Code Online (Sandbox Code Playgroud)
解决方法
但是,您可以使用Results.Text()并指定内容类型:
return Results.Text(json, contentType: "application/json");
Run Code Online (Sandbox Code Playgroud)
在 Postman 中产生相同的结果:
return Results.Json(jo);
Run Code Online (Sandbox Code Playgroud)