将 ServiceStack 默认格式更改为 JSON,但保留 SwaggerUI 的 HTML 格式
Change ServiceStack default format to JSON, but keep HTML format for SwaggerUI
基本上,我希望默认情况下我的所有回复都在 JSON 中返回,搜索答案并偶然发现了这个讨论:ServiceStack default format
我尝试了什么:
将 DefaultContentType 设置为 JSON 并禁用 Feature.Html --> 适用于响应,但会破坏 SwaggerUI(页面呈现错误)
仅将 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;
});
基本上,我希望默认情况下我的所有回复都在 JSON 中返回,搜索答案并偶然发现了这个讨论:ServiceStack default format
我尝试了什么:
将 DefaultContentType 设置为 JSON 并禁用 Feature.Html --> 适用于响应,但会破坏 SwaggerUI(页面呈现错误)
仅将 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;
});