如果我有一个 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);
});
Thanks
您的“解决方法”是从最小 API 返回 Json 的正确方法。请参阅中可用的方法Results https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.results?view=aspnetcore-6.0#methods类以获取可用响应的完整列表。
Results.Json() https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.results.json?view=aspnetcore-6.0是返回Json的正确响应。 IMO,你的第二种技术不是"ugly",而是读取和反序列化Json的正确方法。不必担心将 Json 反序列化为对象只是为了再次序列化它的性能 - 如果它成为问题,您可以在此时解决它。如果返回之前需要修改json怎么办?无论如何,在这种情况下你需要反序列化它。
我还要补充一点,理想情况下,您应该反序列化为定义的类,而不是object
:
var jo = JsonSerializer.Deserialize<CustomClass>(json);
解决方法
然而,你could use Results.Text() https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.results.text?view=aspnetcore-6.0并指定内容类型:
return Results.Text(json, contentType: "application/json");
在 Postman 中产生相同的结果:
return Results.Json(jo);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)