使用FromUri绑定没有参数名称前缀的对象

时间:2017-06-06 17:28:33

标签: c# .net asp.net-web-api2 swagger swashbuckle

当使用ASP.NET WebApi2和Swashbuckle / Swagger时,我试图使用FromUri属性绑定一个对象,如下所示:

[RoutePrefix("api/v1/example")]
public class ExampleController : ApiController
{
    [HttpGet]
    [Route("{id}")]
    public ExampleModel Get(string id, [FromUri]ExampleModel searchCriteria)
    {
    ...
    }
}

public class ExampleModel
{
    public string id { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
}

我发现执行此GET操作并按姓氏搜索的URL最终类似于:

http://localhost:52259/api/v1/example/1?searchCriteria.firstName=paul

如何从查询参数中删除“searchCriteria”前缀?我想将它作为控制器方法签名中的ExampleModel对象保留,但能够使用(并将其反映在Swagger UI文档中):

http://localhost:52259/api/v1/example/1?firstName=paul

1 个答案:

答案 0 :(得分:4)

FromUri属性上有一个Name属性。如果我将其设置为空字符串,则会使Swagger UI文档显示为没有" searchCriteria。"前缀:

public ExampleModel Get(string id, [FromUri(Name = "")]ExampleModel searchCriteria)
{
...
}

无论是否存在" searchCriteria,控制器似乎都会收到firstName。" prefix作为查询参数名称的一部分。