2 votes

Changer le format par défaut de ServiceStack en JSON, mais conserver le format HTML pour SwaggerUI

Essentiellement, je veux que toutes mes réponses soient renvoyées en JSON par défaut. J'ai cherché une réponse et suis tombé sur cette discussion : Format par défaut de ServiceStack

Ce que j'ai essayé :

  1. Définir DefaultContentType à JSON et désactiver Feature.Html --> fonctionne pour les réponses, mais casse SwaggerUI (erreur sur le rendu de la page)

  2. Seul le réglage de DefaultContentType à JSON --> ne casse pas SwaggerUI, mais faire des demandes à mes services à partir du navigateur renvoie du HTML (ce qui est logique parce que les navigateurs ont habituellement l'en-tête Accept pour recevoir du html ou du xml, mais je veux par défaut du JSON)

Cela dit, y a-t-il un moyen de uniquement (et en toute sécurité) activer Feature.Html pour SwaggerUI ? Peut-être en utilisant PreRequestFilters ?

2voto

mythz Points 54874

Le problème est qu'en supprimant le format HTML, le type de contenu HTML n'est plus pris en compte, mais j'ai modifié le système pour préserver le type de contenu si le service renvoie une chaîne HTML brute dans le champ "HTML". cet engagement où l'interface utilisateur Swagger peut renvoyer des pages HTML même si le format HTML est désactivé.

Cette modification est disponible à partir de la version 5.4.1 qui est maintenant disponible. disponible sur MyGet .

Une alternative est de laisser le format HTML activé mais d'utiliser un filtre de demande pour changer le type de contenu en JSON alors qu'il est en HTML pour toutes les demandes pour lesquelles vous voulez faire cela, par exemple :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X