Web API、IQueryable、OData 和 HttpResponseMessage 作为返回类型?

4
在过去的几天里,我看到了一些很好的例子,说明如何使用HttpResponseMessage类型作为Web API操作的返回类型。这使得单元测试变得更加容易,因为它可以让你“伪造”整个HttpMessage,在任何正常情况下,你需要在单元测试中实际执行真实请求,使用WebClient或类似工具,并且需要运行两个Visual Studio实例。
无论如何,假设我想使用HttpResponseMessage这种方法,但我也想使用新的IQueryable-OData-thingy,那么这种方法是否可行呢?因为我猜我会查询一堆HttpResponseMessages,至少据我所知,只应该有一个...
因此,HttpResponseMessage方法似乎会“破坏”IQueryable和OData的整个理念,这样说对吗?
提前感谢!
2个回答

3

如果响应内容是ObjectContent并包含一个IQueryable<T>或IEnumerable<T>,则Queryable将起作用。如果您使用Request.CreateResponse助手创建响应,则查询将起作用。另外,Task<IQueryable<T>>也会起作用。


3
这里提供的信息太少了,我刚刚尝试了你说的方法,但由于OData的EdmModelBuilder在WebApi.Config.cs中期望IQueryable或IEnumerable,因此在ODataController操作的返回类型为HttpResponseMessage时会抛出异常。你能否提供更多细节? - mare

1

我设法让Web API返回HttpResponseMessage并仍然能够使用OData,只需设置[EnableQuery]属性:

[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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接