让我开始说一句:虽然我对编程并不陌生,但对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>>
和许多其他组合。似乎没有任何作用。
非常感谢您的帮助。