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

时间:2018-10-11 20:28:54

标签: json servicestack swagger-ui

本质上,我希望默认情况下,我所有的响应都以JSON返回,搜索答案并偶然发现以下讨论:ServiceStack default format

我尝试过的事情:

  1. 将DefaultContentType设置为JSON并禁用Feature.Html->可用于响应,但会中断SwaggerUI(页面渲染错误)

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

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

1 个答案:

答案 0 :(得分:2)

问题是删除HTML格式实际上从考虑中删除了HTML ContentType,但是如果服务在this commit中返回了原始HTML字符串(Swagger UI可以返回HTML页面),则我将其更改为保留Content Type。即使禁用了HTML格式。

此更改可从v5.4.1(现在为available on MyGet)中获得。

另一种方法是保留HTML格式,但使用请求过滤器将Content Type更改为JSON,其中您要执行此操作的所有请求的HTML格式,例如:

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