将 ServiceStack 默认格式更改为 JSON,但保留 SwaggerUI 的 HTML 格式

Change ServiceStack default format to JSON, but keep HTML format for SwaggerUI

基本上,我希望默认情况下我的所有回复都在 JSON 中返回,搜索答案并偶然发现了这个讨论:ServiceStack default format

我尝试了什么:

  1. 将 DefaultContentType 设置为 JSON 并禁用 Feature.Html --> 适用于响应,但会破坏 SwaggerUI(页面呈现错误)

  2. 仅将 DefaultContentType 设置为 JSON --> 不会破坏 SwaggerUI,但会从浏览器 returns HTML 向我的服务发出请求(这是有道理的因为浏览器通常接受 header 来接收 html 或 xml,但我想默认为 JSON)

就是说,有没有什么方法可以 (并且安全地)为 SwaggerUI 启用 Feature.Html?也许使用 PreRequestFilters?

问题是删除 HTML 格式实质上从考虑中删除了 HTML ContentType,但如果服务 return 是原始 [= this commit 中的 19=] 字符串,其中 Swagger UI 可以 return HTML 页,即使 HTML 格式被禁用。

此更改适用于现在 available on MyGet 的 v5.4.1。

另一种方法是启用 HTML 格式,但使用请求过滤器将内容类型更改为 JSON,对于您要为其执行此操作的所有请求,它是 HTML ,例如:

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