C# 为什么Visual Studio 2013脚手架不同(控制器与WebApi)?

C# 为什么Visual Studio 2013脚手架不同(控制器与WebApi)?,c#,asp.net-web-api,visual-studio-2013,C#,Asp.net Web Api,Visual Studio 2013,对于所有实体的正常读取,控制器版本为: public ActionResult Index() { var tmembers = db.tMembers.Include(t => t.tEducationType).Include(t => t.tRaceType).Include(t => t.tReligion); return View(tmembers.ToList()); } WebAPI是: public

对于所有实体的正常读取,控制器版本为:

   public ActionResult Index()
    {
        var tmembers = db.tMembers.Include(t => t.tEducationType).Include(t => t.tRaceType).Include(t => t.tReligion);
        return View(tmembers.ToList());
    }
WebAPI是:

   public IQueryable<tMember> GettMembers()
    {
        return db.tMembers;
    }
publicIQueryable GettMembers()
{
返回db.tMembers;
}

知道它们为什么不一样吗?

WebAPI返回IQueryable以支持OData。相反,如果您只想返回JSON,请将服务设置为序列化为JSON,并将签名更改为public IEnumerable GetMembers()

…因为控制器返回一个呈现传入模型的视图(很可能是友好的html),但webapi只会输出数据(作为JSON/xml)对模型没有做更多的事情吗?为什么控制器使用Include?默认情况下,WEBAPI似乎启用了延迟加载?(我需要在DBContext构造函数中关闭它,以使返回的json工作)
Include
与WebAPI和MVC无关。无论哪种方式都可以。是否包含在JSON中返回的外键实体?没有它就不会吗。。这很奇怪,因为只有dn.tMembers我无法获得JSON,但一旦我关闭了延迟加载,它就可以工作了。让我想知道,当我将延迟加载保留在URL上时,会出现什么问题,这样我就可以将OData命令附加到URL上,并且它可以正常工作?我从没想过要那样做。。现在我只是在代码中进行筛选。。但也许在url中过滤有一些好处?我自己对使用OData的细节不太熟悉,但据我所知,是的,您只需在客户端添加选择,只要您公开IQueryable,它们就会作为选择进行传播。然而,这也意味着远程用户很容易在您的系统上造成巨大的负载。