Swagger UI在我的控制器的GET动作中,对于我的复杂类型参数,不会渲染请求体参数字段。

25 浏览
0 Comments

Swagger UI在我的控制器的GET动作中,对于我的复杂类型参数,不会渲染请求体参数字段。

我有一个ASP.NET Web API 2项目,我在其中添加了Swagger - Swashbuckle v5.6.0。一切都正常工作。Swagger UI按预期渲染了我的API的测试端点。

我向我的API添加了一个新的控制器。其中包含一个带有复杂类型参数的GET方法。对于复杂类型,Web API尝试从消息体中读取值。这是默认行为。

这是我的GET方法:

    [HttpGet]
    [Route("search")]
    [ResponseType(typeof(List))]
    public IHttpActionResult Search(SearchModel searchOptions)
    {
        //....
        return Ok();
    }

这是我的复杂类型:

public class SearchModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
    public string AddressLine1 { get; set; }
    public string City { get; set; }
    public string Telephone { get; set; }
    public string MobilePhone { get; set; }
}

问题:

但是Swagger UI没有在GET方法的复杂类型中渲染消息体参数字段。对于POSTPUT方法,Swagger UI按预期渲染消息体参数字段,但对于我GET方法中的复杂类型却没有。

Screenshot of my GET action from Swagger UI

如屏幕截图所示,Swagger UI为我的复杂类型中的属性渲染查询参数字段,而不是像在POSTPUT方法中那样为我的类型渲染消息体参数字段。

当使用Postman进行测试并在请求的消息体中填充JSON时,我的GET方法正常工作。通过在Visual Studio中的操作中设置断点,我可以看到值绑定到我的操作参数中的对象中。

Postman screenshot

我尝试在我的操作参数中使用[FromBody]进行装饰(这是复杂类型的默认值),但结果相同。

这是Swagger的一个错误吗?还是我漏掉了什么?

0