我有一个控制器方法,如下所示:
[HttpPost]
[Consumes("application/x-www-form-urlencoded")]
[Produces("application/json")]
public async Task<IActionResult> GenerateTokenAsync([FromForm]TokenParameters tokenParameters)
TokenParameters看起来像这样:
public class TokenParameters
{
/// <summary>
/// Specifies the grant type. Must be "password".
/// </summary>
[Required]
public GrantType? grant_type
{
get;
set;
}
/// <summary>
/// Specifies the username.
/// </summary>
[Required]
public string username
{
get;
set;
}
/// <summary>
/// Specifies the password.
/// </summary>
[Required]
public string password
{
get;
set;
}
}
一切正常,但Swagger UI没有为成员提取///三次斜杠评论。我的其他控制器使用FromBody和///三次斜杠评论可以正常使用。好像底部的模型部分选择了注释,但是当我看到控制器时,我正在谈论浅绿色部分中的模型描述。
我查看了模式注册表,确实存在描述。
编辑:使用Swashbuckle 5.0 Beta。
编辑#2:它似乎也没有从模式注册表中获取表单参数的示例值。
有任何想法吗?
确保您的项目已选中Generate xml documentation
选项。
此外,配置Swagger时,请确保包含xml注释。
// Register the Swagger generator, defining one or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v2", new Info { Title = "my API", Version = "v2" });
// Set the comments path for the Swagger JSON and UI.
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "myapp.xml");
c.IncludeXmlComments(xmlPath);
});
我也有这个问题。我的问题是我没有包含正确的XML文档文件。我只包含了Web应用程序XML文档,而我的“创建选项”对象是从另一个程序集中定义的表单数据创建的。一旦我让这个程序集生成XML文档并将其包含在swagger配置中,我就能够获得每个表单字段项的描述。
这是我的控制器方法从客户端处理POST:
/// <summary>
/// Create a new very complex object.
/// </summary>
/// <param name="creationOptions">Very complex creation options</param>
/// <returns>The very complex object as a data transfer object.</returns>
[HttpPost]
[Consumes("application/x-www-form-urlencoded")]
public async Task<IActionResult> CreateVeryComplexObject([FromForm] VeryComplexObjectCreationOptions creationOptions) { }
添加swagger服务时,我包含了两个程序集中的文档:
services.AddSwaggerGen(config =>
{
// All my other swagger configuration here...
config.IncludeXmlComments(System.IO.Path.Combine(AppContext.BaseDirectory, "MyService.API.Web.xml"));
config.IncludeXmlComments(System.IO.Path.Combine(AppContext.BaseDirectory, "MyService.API.Contracts.xml"));
});
这是在Swashbuckle 4.0.1上。