Как вернуть строку 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. Пожалуйста, ознакомьтесь с методами, доступными вResultsclass для получения полного списка доступных ответов.

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.

Другие вопросы по тегам