2013-03-08 66 views
3

在过去的几天中,我已经看到了一些很好的例子,说明如何使用HttpResponseMessage类型作为Web API操作的返回类型。这使得单元测试更加容易,因为它可以“伪造”整个HttpMessage,你会得到在任何正常情况下,你需要实际再次做一个真正的请求在单元测试中使用WebClient或类似的操作,也需要运行Visual Studio的两个实例..Web API,IQueryable,OData和HttpResponseMessage作为返回类型?

无论如何..让我们说我想用这个方法与HttpResponseMessage ..但我也想使用新的IQueryable-OData-thingy ..会甚至是可能的..因为我想我然后会查询一堆HttpResponseMessages ..哪据我所知,至少应该只有一个...

所以HttpResponseMessage方法会用IQueryable和OData“打破”整个想法..或者我是对的吗?

在此先感谢!

回答

3

如果response.Content是ObjectContent并且包含IQueryable<T>IEnumerable<T>,则可以进行查询。如果您使用Request.CreateResponse帮助程序创建您的回复,则查询可行。此外,作为供参考,Task<IQueryable<T>>也可以工作。

+2

得太少的信息,我只是想你说什么,因为的OData的WebApi.Config.cs中的EdmModelBuilder需要IQueryable或IEnumerable,它会引发一个异常,让HttpResponseMessage作为ODataController操作的返回类型。或者你能提供关于这方面的更多细节吗? – mare 2014-04-25 10:02:38

+1

同意,这里的信息太少。 – 2014-05-13 13:08:53

1

我管理有一个网页API返回一个HttpResponseMessage,仍然能够仅仅通过设置[EnableQuery]属性使用OData的:这里

[EnableQuery] 
public HttpResponseMessage Get(MyModel model) 
{ 
    if (!ModelState.IsValid) return Request.CreateResponse((HttpStatusCode)422, "Unprocessable Entity"); 

    //your-code-here 

    return Request.CreateResponse(HttpStatusCode.OK, myEnumerable); 
} 
相关问题