我正在使用Web Api和ODataController开发OData查询库。当我从网络浏览器运行我的api时它什么也没有返回。我没有收到任何错误。我可以在Visual Studio中进行调试,并清楚地看到该方法运行并成功将我的结果作为IQueryable<>返回。在某个地方,它丢弃了我的数据。有没有人见过或遇到过这个?我在下面提供了我的代码供参考:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.OData;
using Epm.Core.Model;
using System.Web.Http.OData.Query;
using Epm.Data.Access;
using Epm.Service.Assemblers;
namespace Epm.Service.Web.Controllers.OData
{
public class SearchActionsController : ODataController
{
private readonly EpmEntities context = new EpmEntities();
[Queryable(AllowedQueryOptions=AllowedQueryOptions.All)]
public IQueryable<ActionStepDisplay> Get(int planId, int? factorId, bool? showArchived)
{
var user = this.GetCurrentUser();
var results = (from p in context.SearchActions(user.SessionId, planId, factorId, showArchived, 1, null)
select p).ToModel().ToArray();
return results.AsQueryable();
}
protected override void Dispose(bool disposing)
{
context.Dispose();
base.Dispose(disposing);
}
}
}
我的配置:
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Epm.Core.Model.ActionStep>("SearchActions");
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);
答案 0 :(得分:4)
您正在从方法返回 ActionStepDisplay ,但在构建器中,您指定 ActionStep 作为实体。
响应标题
中可能不可接受(406)答案 1 :(得分:0)
问题可能在于MediaFormatter,它在控制器完成后被调用。当媒体类型格式化程序遇到引用循环(其中对象A引用B和B引用A)时,您需要告诉媒体类型格式化程序如何处理它,因此在Json媒体类型格式化程序中,您可以执行类似...
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.All;
我建议您使用Fiddler查看实际情况。你说你没有在浏览器中得到响应,那么返回什么HTTP代码?你可以用Fiddler找出......