C#/ ASP.NET - 通过URL调用Web API操作? :HTTP错误500

时间:2012-08-01 01:02:26

标签: http rest asp.net-mvc-4 asp.net-web-api

我正在开发一个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"                    
            }
        );
    }



}
}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我想我把它缩小到了HTTP的Accept标头。当您通过JavaScript调用API时,将Accept标头作为JSON或XML传递它。

当您从浏览器拨打电话时,您要求使用不同的内容类型,因此会收到错误500.

我仍然无法确认,但看起来就像那样。

答案 1 :(得分:0)

问题在于,当我创建.dbml文件并将表拖放到其中时,自动生成的DataContext类创建了EntitySet对象以表示外键关系。我使用获取沙集来创建简单类以返回JSON,而不是DataContext中的类,不包括EntitySet对象。结果,它就像一个魅力。显然,EntitySet不是可序列化的,因此给出了500错误。