web-dev-qa-db-ja.com

Web APIを既存のMVC Webアプリケーションに追加した後の404エラー

ここに素晴らしい質問があります:既存のASP.NET MVC 4 WebアプリケーションプロジェクトにWeb APIを追加する方法?

残念ながら、私の問題を解決するのに十分ではありませんでした。私は何も悪いことをしていないことを確認するために二度試しました。 「コントローラー」を右クリックして、「Entity Frameworkを使用したアクションを備えたWeb API 2コントローラー」という項目を追加し、モデルクラスとdbコンテキストを選択しました。すべてうまくいきましたが、それでも.../api/Restにアクセスしようとするたびに、404エラーが発生しました(コントローラーの名前はRestControllerです)。

60
Luis Gouveia

動いている!!!私は信じたくありませんでしたが、問題は、Global.asaxルーティングorderに関連していたと思います。

それは動作しませんが:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 4th
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}      

で動作します:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 2nd
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}      

クレイジー、私は知っている。

118
Luis Gouveia

既存のMVC(5)プロジェクト内でWebAPIを使用する場合は、次の手順を実行する必要があります。
1.WebApiパッケージを追加:

_Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.WebHost
Newtonsoft.Json
_

2。_WebApiConfig.cs_ファイルを_App_Start_フォルダーに追加:

_using System.Web.Http;

namespace WebApiTest
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}
_

。_Glabal.asax_:に次の行を追加します

_GlobalConfiguration.Configure(WebApiConfig.Register);
_

重要な注意:AreaRegistration.RegisterAllAreas();の直後に上記の行を追加する必要があります

_protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    //\\
    GlobalConfiguration.Configure(WebApiConfig.Register);
    //\\
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}
_
3
Mohammad Dayyan

「常に新しいルートを追加する場合は、最上部に特定のルートを追加し、最後により一般的なルートを追加する必要があります。そうしないと、Webアプリは適切なルーティングを受信できません。」

上記はここからの引用です。 http://www.codeproject.com/Tips/771809/Understanding-the-Routing-Framework-in-ASP-NET-MVC

答えは既に与えられていることは知っていますが、これは、GlobalConfiguration.Configure(WebApiConfig.Register);を配置する必要がある理由を理解するのに役立ちます。 RouteConfig.RegisterRoutes(RouteTable.Routes);の前

2
Sergey