0

ASP.NET MVC 4 アプリケーションを開発しています。データベースから情報を取得して Web ページに表示することは、この段階ではうまくいきました。次に、アプリケーションの進行状況と並行して、Web API も開発したいと考えました。ローカル ホストで URL を使用してテストするまでは、これまでのところ問題ありませんでした。

試してみると、HTTP Error 500 が出ました。

http://localhost:23375/VS 2010 からアプリケーションを実行すると、ブラウザで開きました。この最後に、API 呼び出しを追加して、次のようにしました。

http://localhost:23375/api/Performance/ShowMachines

Enterキーを押すと、エラーが発生します。これはなぜですか?どうすれば解決できますか?

関連するコードは次のとおりです。

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



}
}
4

2 に答える 2

0

同じ問題が発生していて、HTTPのAcceptヘッダーに絞り込んだと思います。JavaScriptを介してAPIを呼び出すと、AcceptヘッダーをJSONまたはXMLとして渡します。

ブラウザから電話をかけると、さまざまなコンテンツタイプを要求しているため、エラー500が発生します。

まだ確認できませんでしたが、そのようです。

于 2012-08-01T16:22:23.147 に答える
0

問題は、.dbml ファイルを作成し、そこにテーブルをドラッグ アンド ドロップしたときに、自動生成された DataContext クラスが、外部キーの関係を表す EntitySet オブジェクトを作成したことでした。EntitySet オブジェクトを除いて、DataContext 内のクラスではなく、JSON を返す get サンド セットを持つ単純なクラスを作成しました。その結果、それは魔法のように機能しました。どうやら EntitySets はシリアル化できないため、500 エラーが発生していました。

于 2012-09-01T22:13:34.683 に答える