我正在开发一个ASP.NET MVC 4应用程序。从数据库中获取信息并在网页上显示它在这个阶段进展顺利。然后我决定开发一个Web API,并与我的应用程序的进展并排。到目前为止一直很好,直到我尝试使用本地主机上的URL进行测试。
当我试用它时,我收到了HTTP错误500.
我从VS 2010运行了该应用程序,它在我的浏览器中打开了http://localhost:23375/
。最后,我附加了我的API调用,将其带到:
http://localhost:23375/api/Performance/ShowMachines
当我按下回车键时,我收到错误消息。为什么会这样,我该如何解决呢?
以下是相关代码:
PerformanceController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using PerfMon.Models;
namespace PerfMon.Controllers
{
public class PerformanceController : ApiController
{
PerfMonDataRepository perfRep = new PerfMonDataRepository();
// GET /performance/machines
[HttpGet]
public IQueryable<Machine> ShowMachines()
{
return perfRep.GetAllMachines();
}
}
}
的Global.asax.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace PerfMon
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "Machines",
routeTemplate: "api/{controller}/{action}",
defaults: new {
controller = "Performance",
action = "ShowMachines"
}
);
}
}
}
答案 0 :(得分:0)
我遇到了同样的问题,我想我把它缩小到了HTTP的Accept标头。当您通过JavaScript调用API时,将Accept标头作为JSON或XML传递它。
当您从浏览器拨打电话时,您要求使用不同的内容类型,因此会收到错误500.
我仍然无法确认,但看起来就像那样。
答案 1 :(得分:0)
问题在于,当我创建.dbml文件并将表拖放到其中时,自动生成的DataContext类创建了EntitySet对象以表示外键关系。我使用获取沙集来创建简单类以返回JSON,而不是DataContext中的类,不包括EntitySet对象。结果,它就像一个魅力。显然,EntitySet不是可序列化的,因此给出了500错误。