在Odata测试中从IHttpActionResult正确投射OKNegotiatedContentResult

时间:2018-10-16 16:49:23

标签: c# odata

让我开始说一句:虽然我对编程并不陌生,但对C#还是很陌生。因此,如果有一种更好的方式来完全创建我的动作,那么我可以接受(在C#中花了很多时间只是“尝试”一下)。我的动作确实可以正常工作,并且返回我需要的东西。我的麻烦实际上是在测试中。

我有一个动作,该动作接收相关数据,其中一项是其他数据的父项。返回的是在将所有相关数据都保存到数据库并扩展了嵌套数据之后,嵌套有相关数据的项目实体。

在我的一项测试中,我很难转换IHttpActionResult。我对此签名采取了行动:

public IHttpActionResult InsertDeep(ODataActionParameters parameters)    

这实际上会返回通过调用此命令创建的值:

protected IHttpActionResult Single<T>(IQueryable<T> itemQuery)
{
    return Content(HttpStatusCode.OK, System.Web.Http.SingleResult.Create(itemQuery));
}

我返回单结果查询,以便可以自动扩展项目实体的某些导航属性。这意味着对api的调用不必添加$ expand选项,这很好,因为此操作应始终返回完整数据。

根据我的研究,我知道为了检查结果的内容,我必须将其强制转换为

IHttpActionResult inserted = controller.InsertDeep(p);
var contents = inserted as OkNegotiatedContentResult<someType>;

但是我使用的每种类型都将内容设置为null。插入的类型是

"System.Web.Http.Results.NegotiatedContentResult`1[System.Web.Http.SingleResult`1[flowApp.Models.Item]]"

我尝试过:

<SingleResult<Item>>
<List<Item>>
<Item>
<IEnumerable<Item>>

和许多其他组合。似乎没有任何作用。

非常感谢您的帮助。

0 个答案:

没有答案