2

我正在使用 Swashbuckle 为 API 生成文档。我的控制器方法如下所示:

[ResponseType(typeof(CategoryCollectionModel))]
        public HttpResponseMessage Get(HttpRequestMessage request, [FromUri]Paging paging)
        {
            var input = new CategoriesListQuery.Input { Page = paging.Page, Size = paging.Size };
            var result = this.queryInvoker.Execute<CategoriesListQuery.Input, CategoriesListQuery.Result>(input);
            var items = Mapper.Map<CategoryCollectionModel>(result);

            return request.CreateResponse(HttpStatusCode.OK, items);
        }

Swashbuckle 将HttpRequestMessage其视为生成文档中的参数。有没有办法将 Swashbuckle 配置为忽略HttpRequestMessage,因为它仅包含在签名中用于测试目的?

4

2 回答 2

3

请参考这里的讨论。简而言之,不要HttpRequestMessage像输入参数一样传入,而是模拟{controller}.Request属性。

于 2015-03-29T10:24:20.230 回答
2

我从“ http://www.morganskinner.com/2016/02/ignoring-parameters-in-swashbuckle.html ”中找到了解决方案

概括 :

在 Swashbuckle 中,您可以插入可用于更改发出数据的操作“过滤器”——过滤器被传递给正在发出的操作的上下文,您可以随意处理弹出的数据。我所要做的就是创建一个过滤器来查找此数据类型,并从结果中删除相应的数据。我最终得到了这个……</p>

     public class IgnoreHttpRequestMessageOperationFilter : IOperationFilter
  {
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, 
                      ApiDescription apiDescription)
    {
      apiDescription.ParameterDescriptions
        .Where(desc => desc.ParameterDescriptor.ParameterType 
            == typeof(HttpRequestMessage))
        .ToList()
        .ForEach(param =>
        {
          var toRemove = operation.parameters
            .SingleOrDefault(p => p.name == param.Name);

          if (null != toRemove)
            operation.parameters.Remove(toRemove);
        });
    }
  }

有了那个类,我只需要将它插入到 swagger 配置文件中,如下所示......

c.OperationFilter<IgnoreHttpRequestMessageOperationFilter>();

为我工作。感谢“摩根

于 2018-01-24T15:52:36.187 回答