ASP.Net Web API在VS中正确显示但提供HTTP500

前端之家收集整理的这篇文章主要介绍了ASP.Net Web API在VS中正确显示但提供HTTP500前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
经过昨天的大量帮助后,我遇到了asp.net4测试版中的已知错误 – 我升级到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; }
    }
}

然后我使用Add Controller向导,选择“Template:API controller with read / write actoins,using Entity Framework”,选择tblCustomerBooking作为我的Model Class,然后单击,即:

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();
        }
    }
}

我在上面的“返回db …..”处添加了一个断点,并检查了VS中的Watch部分 – 它清楚地显示了对象,与客户以及相关的租赁:

但是,如果我允许脚本继续,我只会得到一个http500错误(如下面的Fiddler所示):

是否还有我可以添加到控制器中的代码,以便让我了解它为什么会出错?或者任何人都可以看到可能出错的地方? VS似乎可以检索它,如第一个屏幕截图所示,但似乎无法将其发送出去.

感谢您的帮助或指示,

标记

更新

嗨 – 我只是问过多的API?是不是(开箱即用)它只能返回具有一对多关系的对象?它只能真正生成一个对象列表吗?

谢谢,马克

解决方法

你在做什么:
db.tblCustomerBookings.Include("tblRentals").Select(i => 
    new { i.something //etc });

还有,您使用的是哪种MediaTypeFormatter,Xml还是Json?错误500通常意味着Formatter正在窒息.

切换到JSON.NET格式化程序(在Web API RC中最简单的方法是执行GlobalConfiguration.Configuration.Formatters.RemoveAt(1) – 这将删除XML格式化程序)并查看它是否有帮助或至少提供更有意义的错误(或请求您的方法内容类型为JSON).

猜你在找的asp.Net相关文章