c# - 离开 ApiController 方法后 WEB API 挂起

标签 c# asp.net-web-api

我的应用程序是使用 ASP.NET MVC 4 和 Web API 构建的。但我有一个奇怪的问题要分享。

对应代码如下

public class MachinesController : ApiController
{
    private GWData db = new GWData();

    // GET api/Machines/5
    public Machine GetMachine(int id)
    {
        Machine machine = db.Machines.Single(m => m.Id == id);
        if (machine == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return machine;
    }

使用以下 URL,我可以检查 Web API 中 Controller 的 API Get 方法。

 http://localhost/myweb/api/machines/1

它奏效了,但正在尝试

 http://localhost/myweb/api/machines/2

使 Web API 永远挂起,而 w3wp.exe 的内存使用量不断上升。所以我最终不得不终止 w3wp.exe 进程。此外,通过在 GET 方法内部设置断点,我确保在获取正确数据并离开该方法后发生挂起。

我该如何处理此类问题?

最佳答案

我应该早点找到这个原因。这是Json序列化的问题。如果实体有很多相关记录,则需要永远序列化实体的导航属性。当然,忘记禁用延迟加载是我的错。添加以下代码解决了问题。

public MachinesController()
{
    db.ContextOptions.LazyLoadingEnabled = false;
}

关于c# - 离开 ApiController 方法后 WEB API 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28614683/

相关文章:

c# - 在 Entity Framework 中使用 DbContext 运行异步调用

c# - REST Web API : How to make Content-Type header optional?

c# - 如何在 asp.net mvc 4 中为 select2 字段提供强制字段验证

c# - 具有集合类型的 CodeContracts

c# - 创造后插入新值(value)

c# - 如何设计用于批量插入和更新的 Restful API?

c# - 在 Web API 中 Controller 初始化之前执行一些操作(设置语言)

c# - 在自定义对象集合上使用 LINQ 时,IEquatable<T>、IEqualityComparer<T> 和覆盖 .Equals() 之间的区别?

c# - 将多个 XML 转换为 JSON 列表

c# - jQuery 与 WebApi 一起使用 - 甚至不调用 Controller 方法