2015-03-27 4 views
1

Я использую Swashbuckle для создания документов для API. Мои методы контроллера выглядят следующим образом:ASP.Net Web API Swashbuckle как игнорировать HttpRequestMessage

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

+0

Мне любопытно, почему вы передаете запрос в качестве аргумента для генерации ответа? Почему бы просто не использовать 'return Request.CreateResponse (HttpStatusCode.OK, items);' и отказаться от запроса в качестве параметра? – RobRolls

+0

Это просто для тестирования, я предпочитаю, чтобы насмехаться над этим. Request' – Pelle

ответ

3

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

1

Я нашел решение от «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); 
     }); 
    } 
    } 

С этого класса на месте, мне просто нужно подключить это к конфигурационный файл чванство следующим образом ...

c.OperationFilter<IgnoreHttpRequestMessageOperationFilter>(); 

Работа для меня. спасибо «Morgan»

Смежные вопросы