ASP.Net Web API Swashbuckle, как игнорировать HttpRequestMessage

Я использую 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, поскольку он включен в подпись только для целей тестирования?


person Pelle    schedule 27.03.2015    source источник
comment
Мне любопытно, почему вы передаете запрос в качестве аргумента для генерации ответа? Почему бы просто не использовать return Request.CreateResponse(HttpStatusCode.OK, items); и отказаться от передачи запроса в качестве параметра?   -  person RobRolls    schedule 29.03.2015
comment
Это просто для тестирования, я предпочитаю издеваться над this.Request   -  person Pelle    schedule 29.03.2015


Ответы (2)


См. обсуждение здесь. Короче говоря, не передавайте HttpRequestMessage как входной параметр, а издевайтесь над свойством {controller}.Request.

person Raju    schedule 29.03.2015

Я нашел решение на сайте http://www.morganskinner.com/2016/02/ignoring-parameters-in-swashbuckle.html"

Резюме :

В Swashbuckle вы можете подключать «фильтры» операций, которые можно использовать для изменения выдаваемых данных — фильтру передается контекст испускаемой операции, и вы можете манипулировать полученными данными. Все, что мне нужно было сделать, это создать фильтр, который будет искать этот тип данных, и удалять соответствующие данные из результатов. Я закончил с этим…

     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>();

Работает на меня. спасибо "Морган"

person Tarek El-Mallah    schedule 24.01.2018