C# ASP.NETWebAPI虚张声势如何忽略HttpRequestMessage
我正在使用Swashback为API生成文档。我的控制器方法如下所示:C# ASP.NETWebAPI虚张声势如何忽略HttpRequestMessage,c#,asp.net,asp.net-web-api2,swagger,swashbuckle,C#,Asp.net,Asp.net Web Api2,Swagger,Swashbuckle,我正在使用Swashback为API生成文档。我的控制器方法如下所示: [ResponseType(typeof(CategoryCollectionModel))] public HttpResponseMessage Get(HttpRequestMessage request, [FromUri]Paging paging) { var input = new CategoriesListQuery.Input { Page = pa
[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);
}
[ResponseType(typeof(CategoryCollectionModel))]
公共HttpResponseMessage获取(HttpRequestMessage请求,[FromUri]分页)
{
var input=newcategorieslistquery.input{Page=paging.Page,Size=paging.Size};
var result=this.queryInvoker.Execute(输入);
var items=Mapper.Map(结果);
返回请求.CreateResponse(HttpStatusCode.OK,items);
}
Swashback将
HttpRequestMessage
视为生成的文档中的一个参数。是否有方法将Swashback配置为忽略HttpRequestMessage
,因为它仅包含在签名中用于测试?请参阅讨论。简而言之,不要像在输入参数中那样传入HttpRequestMessage
,而是模拟{controller}.Request
属性。我从“”中找到了一个解决方案
总结:
在Swashblock中,您可以插入操作“过滤器”,用于
更改发出的数据–过滤器被传递到
正在发出操作,您可以使用
突然出现。那时我所要做的就是创建一个过滤器来查找
并从结果中删除相应的数据。我
结果是
有了这个类,我只需要把它插入到大摇大摆中
配置文件如下所示
c.操作过滤器();
为我工作。谢谢“”我很好奇为什么要将请求作为参数传递以生成响应?为什么不直接使用
returnrequest.CreateResponse(HttpStatusCode.OK,items)
并放弃将请求作为参数传递?这只是为了测试目的,我更喜欢这样,而不是模仿这个。请求
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>();