【问题标题】:Web API, IQueryable, OData and HttpResponseMessage as return-type?Web API、IQueryable、OData 和 HttpResponseMessage 作为返回类型?
【发布时间】:2013-02-23 17:59:53
【问题描述】:

在过去的几天里,我看到了一些很好的例子,说明了如何使用 HttpResponseMessage 类型作为 Web API 操作的返回类型。这使得单元测试变得更加容易,因为它可以“伪造”整个 HttpMessage 在任何正常情况下,您都需要在单元测试中使用 WebClient 或类似的操作再次实际执行实际请求,并且还需要运行两个 Visual Studio 实例。

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

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

提前致谢!

【问题讨论】:

    标签: c# asp.net-web-api odata httpresponse iqueryable


    【解决方案1】:

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

    【讨论】:

    • 这里的信息太少了,我只是尝试了您所说的,并且由于 WebApi.Config.cs 中的 OData 的 EdmModelBuilder 需要 IQueryable 或 IEnumerable 它会引发异常,以将 HttpResponseMessage 作为 ODataController 操作的返回类型。或者您能提供更多详细信息吗?
    【解决方案2】:

    我设法让 web 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 2013-01-29
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      相关资源
      最近更新 更多