Измените формат по умолчанию ServiceStack на JSON, но сохраните формат HTML для SwaggerUI - PullRequest
0 голосов
/ 11 октября 2018

По сути, я хочу, чтобы все мои ответы возвращались в JSON по умолчанию, искали ответ и наткнулись на это обсуждение: Формат по умолчанию для ServiceStack

Что я пытался:

  1. Установка DefaultContentType в JSON и отключение Feature.Html -> работает для ответов, но прерывает SwaggerUI (ошибка при отображении страницы)

  2. Только установка DefaultContentType в JSON-> не нарушает SwaggerUI, но отправка запросов моим службам из браузера возвращает HTML (что имеет смысл, поскольку браузеры обычно принимают заголовок Accept для получения html или xml, но я хочу по умолчанию использовать JSON)

Тем не менее, есть ли способ только (и безопасно) включить Feature.Html для SwaggerUI?Может быть, с помощью PreRequestFilters?

1 Ответ

0 голосов
/ 12 октября 2018

Проблема с удалением формата HTML по существу удаляет HTML ContentType из рассмотрения, но я изменил его, чтобы сохранить тип содержимого, если служба возвращает необработанную строку HTML в этот коммит , где пользовательский интерфейс Swagger можетвозвращать HTML-страницы, даже если формат HTML отключен.

Это изменение доступно с v5.4.1, которое теперь доступно на MyGet .

Альтернатива - оставить HTMLФормат включен, но используйте фильтр запросов, чтобы изменить тип контента на JSON, где он является HTML для всех запросов, для которых вы хотите сделать это, например:

PreRequestFilters.Add((req, res) => {
    if (req.ResponseContentType.Matches(MimeTypes.Html) && !req.PathInfo.StartsWith("/swagger-ui"))
        req.ResponseContentType = MimeTypes.Json;
});
...