Как вернуть строку json с типом контента json в сети 6 и минимальным API?
Если у меня есть строка 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);
});
Спасибо
2 ответа
Ваш «обходной путь» — это правильный метод возврата Json из минимального API. Пожалуйста, ознакомьтесь с методами, доступными вResults
class для получения полного списка доступных ответов.
Results.Json()
является правильным ответом на возврат Json. ИМО, ваш второй метод не «уродливый» , а правильный способ чтения и десериализации Json. Не беспокойтесь о производительности десериализации Json в объект только для его повторной сериализации - если это станет проблемой, вы можете решить ее в этот момент. Что делать, если вам нужно изменить json перед его возвратом? В любом случае вам нужно будет десериализовать его в этом случае.
Я бы также добавил, что в идеале вы бы десериализовали в определенный класс, а не
object
:
var jo = JsonSerializer.Deserialize<CustomClass>(json);
Обходной путь
Однако вы могли бы использоватьResults.Text()
и укажите тип содержимого:
return Results.Text(json, contentType: "application/json");
который дает тот же результат в Postman, что и:
return Results.Json(jo);
Правильный ответ:
return Results.Text(json, contentType: "application/json");
Ответ @haldo неверен, потому что он заявляет, что это обходной путь, а не так. У вас уже есть JSON и вы хотите выводить тот же JSON без переделок, и вы просто хотите сообщить браузерам, что это JSON. Так что здесь нет обходного пути, просто правильный способ вывода содержимого JSON.