【发布时间】:2021-02-22 16:29:00
【问题描述】:
我的环境:Asp.NET WebAPI、NET Framework 4.5.2、Swashbuckle.Core 5.6.0
由于某种原因,我的控制器必须继承之前的同一个控制器,像这样
public class User100Controller : ApiController
{
[HttpGet]
[AllowAnonymous]
public virtual string Get()
{
return "1.0.0";
}
}
public class User101Controller : User100Controller
{
[HttpGet]
[AllowAnonymous]
public override string Get()
{
return "1.0.1";
}
}
直接运行,swagger ui页面正确显示
sample picture, pls right click
但是如果我添加一个带有参数的 Post Action,swagger ui 不会重新识别请求模型
UserModel 和 UserModelSex
/// <summary>
/// UserModel
/// </summary>
public class UserModel
{
/// <summary>
/// Name
/// </summary>
public string name { get; set; } = string.Empty;
/// <summary>
/// Age
/// </summary>
public int age { get; set; } = 0;
}
/// <summary>
/// UserModelSex
/// </summary>
public class UserModelSex : UserModel
{
/// <summary>
/// Sex
/// </summary>
public int sex { get; set; } = -1;
}
User100Controller
[HttpPost]
[SwaggerResponse(200, "success", typeof(UserModel))]
public virtual IHttpActionResult SaveUser([FromBody] UserModel model)
{
if (string.IsNullOrEmpty(model.name) || model.age == 0)
{
return Ok("error");
}
//...
return Ok("success");
}
sample picture, pls right click
这是正确的效果,现在如果我在User101ontroller中覆盖这个SaveUser Action,并传递新的请求模型UserModelSex,我得到一个错误,因为Override Method必须与父方法具有相同的参数列表,所以我像这样更改它
public class User100Controller : ApiController
{
[HttpPost]
[SwaggerResponse(200, "success", typeof(UserModel))]
public virtual IHttpActionResult SaveUser([FromBody] JObject json)
{
var model = json.ToObject<UserModel>();
if (string.IsNullOrEmpty(model.name) || model.age == 0)
{
return Ok("error");
}
//...
return Ok("success");
}
}
public class User101Controller : User100Controller
{
[HttpPost]
[SwaggerResponse(200, "success", typeof(UserModelSex))]
public override IHttpActionResult SaveUser([FromBody] JObject json)
{
var model = json.ToObject<UserModelSex>();
if (string.IsNullOrEmpty(model.name) || model.age == 0 || model.sex == -1)
{
return Ok("error");
}
//...
return Ok("success");
}
}
swagger ui 无法识别 JObject
sample picture, pls right click
如何在请求模型中显示UserModel和UserModeSex,如图2
【问题讨论】:
标签: swagger swagger-ui swashbuckle webapi