Asp.net mvc ASP.NET Web API Post方法始终返回整个实体集合
每当我调用Web API控制器的Asp.net mvc ASP.NET Web API Post方法始终返回整个实体集合,asp.net-mvc,entity-framework,asp.net-web-api,Asp.net Mvc,Entity Framework,Asp.net Web Api,每当我调用Web API控制器的Post方法时,它都会返回JSON中的实体列表,就像我调用Get方法一样。我已经注释掉了控制器中的Get方法,它仍然返回数据库中的实体列表。我正在使用Post方法创建一个新实体,这是可行的,但我只希望返回那个新实体。这是我的ApiControllerPost方法 // POST api/MyEntity public HttpResponseMessage Post(MyEntityDTO myEntityDTO) { if (Mo
Post
方法时,它都会返回JSON中的实体列表,就像我调用Get
方法一样。我已经注释掉了控制器中的Get方法,它仍然返回数据库中的实体列表。我正在使用Post方法创建一个新实体,这是可行的,但我只希望返回那个新实体。这是我的ApiController
Post方法
// POST api/MyEntity
public HttpResponseMessage Post(MyEntityDTO myEntityDTO)
{
if (ModelState.IsValid)
{
MyEntity newEntity = new MyEntity();
newEntity.AccountId = myEntityDTO.AccountId;
newEntity.DateTime = DateTime.Now;
db.MyEntities.AddObject(newEntity);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, newEntity);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = newEntity.EntityID }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
我不确定这是否与路由有关,但这里是WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
编辑:我在发布
MyEntities
时使用的表与另一个表有多对一
关系,与另一个表有一对多
关系。我创建了一个没有关系的新表,并在帖子中使用了它。这与预期的一样,它只返回添加的实体,而不是该表中的所有记录。实体关系是否控制返回的内容?这与延迟加载或显式加载有关吗 新记录是否有一个字段链接到许多其他MyEntityDTO
?在结果中,您实际看到一条MyEntityDTO
记录,其中一个字段是所有其他MyEntityDTO
记录的列表
仔细检查JSON结构,并检查根节点是数组还是单个对象
如果是这样,您可能需要重新考虑您的DTO是否需要一个字段,该字段是其他DTO的列表。您是否尝试过逐步调试代码?这似乎与你的帖子无关,因为这看起来不错。这里似乎没有返回所有项目的方法,除非调用客户端或运行旧代码。它直接来自
返回响应代码>行到MyEntities.edmx
designerMyEntities.designer.cs
。这是ADO实体数据模型
。我使用数据库优先的方法。调试时,它转到设计器中的基本属性。它对表中的所有记录进行调试。我还通过浏览器调试器查看了网络,没有任何对Get
的调用。“POST”请求的响应代码是什么?它真的是HttpStatusCode.Created
?@Liel响应代码是201。请参阅我的编辑,这可能与此有关。我正在使用VS 2010 MVC4 Web API项目,数据库优先与ADO实体数据模型。我试图添加的实体具有与两个表的多对一
和一对多
关系。