ASP.Net Web API 在 VS 中正确显示但给出 HTTP 500

标签 asp.net asp.net-mvc asp.net-web-api

经过昨天的大量帮助,我遇到了 asp.net4 beta 中的一个已知错误 - 我升级到 VS2012 RC Express (4.5),现在出现内部服务器错误,我不明白为什么。我正在创建一个 Web API:
型号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcApplication6.Models
{
    public class tblCustomerBooking
    {
        [Key()]
        public int customer_id { get; set; }
        public string customer_name { get; set; }
        public string customer_email { get; set; }
        public virtual ICollection<tblRental> tblRentals { get; set; }
    }

    public class tblRental
    {
        [Key()]
        public int rental_id { get; set; }
        public int room_id { get; set; }
        public DateTime check_in { get; set; }
        public DateTime check_out { get; set; }
        public decimal room_cost { get; set; }
        public int customer_id { get; set; }
        [ForeignKey("customer_id")]
        public virtual tblCustomerBooking tblCustomerBooking { get; set; }
    }
}
然后我使用添加 Controller 向导,选择“模板:具有读/写 Action 的 API Controller ,使用 Entity Framework ”,选择 tblCustomerBooking 作为我的模型类,然后单击 ,即:
using System.Data.Entity;

namespace MvcApplication6.Models
{
    public class BookingsContext : DbContext
    {
        public BookingsContext() : base("name=BookingsContext")
        {
        }
        public DbSet<tblCustomerBooking> tblCustomerBookings { get; set; }
    }
}
Visual Studio 2012 Express 自动生成的我的 Controller (BookingsController.cs)是:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using MvcApplication6.Models;

namespace MvcApplication6.Controllers
{
    public class BookingsController : ApiController
    {
        private BookingsContext db = new BookingsContext();

        // GET api/Bookings
        public IEnumerable<tblCustomerBooking> GettblCustomerBookings()
        {
            return db.tblCustomerBookings.AsEnumerable();
        }
    }
}
我在上面的“return db .....”处添加了一个断点,并检查了 VS 中的 Watch 部分 - 它清楚地显示了对象、客户以及相关的租金:
Snapshot of customer and rental objects
但是,如果我允许脚本继续运行,我只会收到一个 http500 错误(如下面的 Fiddler 所示):
Fiddler screenshot showing HTTP500
是否还有更多代码可以添加到 Controller 中以让我了解它为什么出错?或者任何人都可以看到可能有什么问题? VS 似乎可以正常检索它,如第一个屏幕截图所示,但似乎无法将其发送出去。
感谢您的任何帮助或指示,
标记
更新
嗨 - 我只是对 API 要求太多了吗?它是否不可能(开箱即用)简单地返回具有一对多关系的对象?它真的只能生成一个对象列表吗?
谢谢,马克

最佳答案

为了解决返回带有 virtual 关键字的实体的 JSON 时出现的错误 500 问题,我执行了以下操作,

    public class BookingsController : ApiController
{
    private BookingsContext db = new BookingsContext();

    // GET api/Bookings
    public IEnumerable<tblCustomerBooking> GettblCustomerBookings()
    {
        db.Configuration.ProxyCreationEnabled = false;  
        return db.tblCustomerBookings.AsEnumerable();
    }
}

对于代理令人不安的特定情况(例如序列化),禁用代理创建(也禁用延迟加载)就足够了。这仅针对 db 的特定上下文实例禁用代理创建。
db.Configuration.ProxyCreationEnabled = false;

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx

关于ASP.Net Web API 在 VS 中正确显示但给出 HTTP 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897523/

相关文章:

asp.net-mvc - 无法将javascript文件添加到cshtml

javascript - 使用 KnockoutJS 的项目选择 MVC View

c# - 在 ASP.NET Web API 上抑制具有空值的属性

C# Web API 在 HTTP Post REST 客户端中发送正文数据

javascript - 纯 HTML AJAX 网站中的页面加载替代方案

c# - 使用 Razor 的 ASP.net MVC 5 ViewBag

c# - .NET 安全机制限制同一项目中两种类型之间的访问?

asp.net-mvc - asp.net-mvc 中的 HTTP 模块与操作过滤器

javascript - 连接到多个数据库的仅 Meteor 服务器 Web 应用程序

Asp.Net 注释导致 VS Code 语法突出显示停止工作