本质上,我希望默认情况下,我所有的响应都以JSON返回,搜索答案并偶然发现以下讨论:ServiceStack default format
我尝试过的事情:
将DefaultContentType设置为JSON并禁用Feature.Html->可用于响应,但会中断SwaggerUI(页面渲染错误)
仅将DefaultContentType设置为JSON->不会破坏SwaggerUI,但是从浏览器向我的服务发出请求会返回HTML(这是有道理的,因为浏览器通常接受Accept标头来接收html或xml,但是我想默认为JSON)
也就是说,有什么方法可以(并且安全地)为SwaggerUI启用Feature.Html吗?也许使用PreRequestFilters?
答案 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;
});