如何让 ServiceStack 的 Swagger 实现使用 XML 内容类型?

How can I get ServiceStack's Swagger implementation to use XML content-type?

我有一个非常基本的 ServiceStack 实验,它使用 Swagger 生成文档。该服务可用于多种不同的内容类型(XML、JSON 等): Default metadata page

但是,我只能在Swagger UI中使用content-type/json。是否有 configuration/attribute 我可以使用,以便我可以测试其他内容类型? Swagger UI

您无法更改 Content Type Swagger 使用的内容,但 ServiceStack 服务提供 automatic Content Negotiation 因此您可以使用 .xml 扩展名查询 XML,例如:

  • /query.xml

或在?format=查询字符串中指定格式:

  • /query?format=xml

或者通过添加 Accept: application/xml HTTP 请求 Header。

Swagger 不允许更改内容类型,但您可以使用更通用的工具,如 ServiceStack's Postman support 或 Fiddler。

修改 Swagger 响应

我刚刚 added a change in the latest v4.0.53 of ServiceStack that's now available on MyGet 让您可以更改 ServiceStack 返回的 Swagger 响应,您可以使用它来填充 consumesproduces 在 API 声明和操作级别:

Plugins.Add(new SwaggerFeature {
    ApiDeclarationFilter = x => 
      x.Consumes = x.Produces = new[] { MimeTypes.Json, MimeTypes.Xml }.ToList(),
    OperationFilter = x => 
      x.Consumes = x.Produces = new[] { MimeTypes.Json, MimeTypes.Xml }.ToList()
});

但这看起来对 Swagger 没有太大影响 UI,我能看到的唯一变化是 body POST 请求中的参数现在允许您发送 XML:

在 Swagger 规范(由 ServiceStack 生成)中,您需要为端点更新 produces 以包含 "application/xml" 和 "application/json" 如果您希望两者都出现在下拉列表中大摇大摆的菜单-ui.

这是一个例子:

"produces": [
  "application/json",
  "application/xml"
],

参考:https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/test/resources/2_0/petstore.json#L77

OpenAPI 规范 produceshttps://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#fixed-fields