asp.net-mvc – Web API,OData,$inlinecount和测试
我之前有一个Web API控制器,如下所示:
public IQueryable<ApiDesignOverview> GetList( string brandIds = "",string categoryIds = "",string query = "",string categoryOp = "or") 我听说OData NuGet包现在支持$inlinecount OData参数,所以我尝试使用http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options中的指令添加它 – 我不想使用OData批发,因为这将需要大量的重新构建应用程序,所以我去了PageResult< T>选项. 所以现在我的控制器看起来像这样: public PageResult<ApiDesignOverview> GetList( ODataQueryOptions<ApiDesignOverview> options,string brandIds = "",string categoryOp = "or") 我现在的问题是: >如何模拟ODataQueryOptions进行单元测试? 真的,如果我像以前一样从控制器签名中删除ODataQueryOptions会更好.这可能吗? 解决方法
如果您更喜欢返回IQueryable并希望支持$inlinecount,那么仍然可以通过对QueryableAttribute进行编码来实现.
public class InlineCountQueryableAttribute : QueryableAttribute { private static MethodInfo _createPageResult = typeof(InlineCountQueryableAttribute) .GetMethods(BindingFlags.Static | BindingFlags.NonPublic) .Single(m => m.Name == "CreatePageResult"); public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { base.OnActionExecuted(actionExecutedContext); HttpRequestMessage request = actionExecutedContext.Request; HttpResponseMessage response = actionExecutedContext.Response; IQueryable result; if (response.IsSuccessStatusCode && response.TryGetContentValue<IQueryable>(out result)) { long? inlineCount = request.GetInlineCount(); if (inlineCount != null) { actionExecutedContext.Response = _createPageResult.MakeGenericMethod(result.ElementType).Invoke( null,new object[] { request,request.GetInlineCount(),request.GetNextPageLink(),result }) as HttpResponseMessage; } } } internal static HttpResponseMessage CreatePageResult<T>(HttpRequestMessage request,long? count,Uri nextpageLink,IEnumerable<T> results) { return request.CreateResponse(HttpStatusCode.OK,new PageResult<T>(results,nextpageLink,count)); } } 请注意,我使用反射来创建PageResult.您可以改为返回您喜欢的对象,该对象可以由您使用的格式化程序格式化.如果您使用Json格式化程序,则具有结果和计数的匿名对象也将起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 将ASP.NET部署到Windows Azure云,应用程序在云上运行时会出
- asp.net – 未处理的IIS异常 – 如何跟踪它
- asp.net-core – 更改Asp.net Core中静态文件的标题
- asp.net mvc datatable
- asp.net-mvc-3 – MVC3只读文本框但值必须POST
- asp.net – AWS SNSClient发布请求的超时错误
- asp.net-mvc – Asp.net MVC查看测试?
- asp.net-mvc – 捕获文件名作为参数的MVC路由
- asp.net – HTTP错误404.15请求过滤模块配置为拒绝查询字符
- asp.net-mvc-3 – 将部分视图返回到同一视图
- asp.net – Windows 7中Safari 5.x的Windows身份
- asp.net – 生成本地资源后缺少服务器标签
- asp.net – 在线.Net编码
- .net – ReportViewer 2010无法评估表达式
- asp.net-mvc – 如何在MVC 3中基于XML文件动态创
- asp.net-mvc – 如何在MVC中使用HtmlHelper获取自
- asp.net-mvc – 安装KB2993928后,ASP.NET MVC4解
- asp.net mvc – asp.net mvc decorate [Authoriz
- asp.net-mvc-3 – MVC 3模型属性未在html.action
- asp.net-mvc – 使用URL重写时Url.Action不正确