Web APIを既存のASP.NET MVC 4 Webアプリケーションプロジェクトに追加する方法


365

Visual Studio 2012で開発されたASP.NET MVC 4 WebアプリケーションプロジェクトにASP.NET Web APIを追加したいと思います。機能するWeb APIをプロジェクトに追加するには、どの手順を実行する必要がありますか?私はApiControllerから派生するコントローラーが必要であることは承知していますが、それだけです。

さらに詳しい情報が必要な場合はお知らせください。

回答:


455

私が実行する必要があったステップは次のとおりでした:

  1. への参照を追加しSystem.Web.Http.WebHostます。
  2. 追加 App_Start\WebApiConfig.cs(以下のコードスニペットを参照)。
  3. に名前空間System.Web.HttpをインポートしますGlobal.asax.cs
  4. 他の方法が優先されるため、デフォルトのWebアプリケーションルートを登録する前にWebApiConfig.Register(GlobalConfiguration.Configuration)MvcApplication.Application_Start()(ファイルでGlobal.asax.cs)呼び出します。
  5. から派生するコントローラを追加しSystem.Web.Http.ApiControllerます。

その後、チュートリアル(最初のASP.NET Web API)からAPIコントローラを定義するのに十分なことを学ぶことができました。

App_Start \ WebApiConfig.cs:

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

Global.asax.cs:

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

2015年10月16日更新:

Wordにはそれがあり、NuGetパッケージMicrosoft.AspNet.WebApiが上記の動作のためにインストールされている必要があります。


12
これは本当に役に立ちました。への参照System.Net.Httpも追加する必要がありましたが、それ以外は魅力的に機能しました!
Christofer Eliasson 2012

5
プロジェクトもMVC3から4にアップグレードし、System.Web.Httpへの参照を追加する必要もありました。
Damien Sawyer

3
今すぐnugetを使用して、発生するすべての変更を把握できます。nuget.org/packages/Microsoft.AspNet.WebApi
Chris

3
Web apiレジスタを次のように変更するまで、これは機能しません。GlobalConfiguration.Configure(WebApiConfig.Register);
KingOfHypocrites 2014

3
@LuisGouveia私はそれが遅いと思いますが、これが私が持っていたものなら、おそらく誰か他の人がもっと早く解決するでしょう。GlobalConfiguration.Configure(WebApiConfig.Register); Global.asaxではRouteConfig.RegisterRoutes(RouteTable.Routes);の前に移動します。
マキシム

77

UPDATE 11/22/2013-これは最新のWebApiパッケージです。

Install-Package Microsoft.AspNet.WebApi

元の回答(これは古いWebApiパッケージです)

Install-Package AspNetWebApi

その他の詳細


3
2013年現在、これはレガシーパッケージであり、Install-Package Microsoft.AspNet.WebApi現在必要です。nuget.org/packages/Microsoft.AspNet.WebApi
Chris

70

MVC 5プロジェクトにWebAPIを追加します。

  1. NuGetパッケージマネージャーコンソールを開いて実行する

    PM> Install-Package Microsoft.AspNet.WebApi
  2. 参照を追加しSystem.Web.RoutingSystem.Web.NetそしてSystem.Net.Http既に存在するDLLでない場合

  3. コントローラーフォルダーを右クリック>新しい項目を追加> Web> Web APIコントローラーを追加

  4. Web.configはVSによって適宜変更されます

  5. Application_Startメソッドがまだない場合は追加します

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  6. 次のクラスを追加します(global.asax.csファイルに追加しました)

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  7. それに応じてWeb APIメソッドを変更する

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }
    
            // GET api/<controller>/5   : url to use => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
  8. 再構築およびテスト

  9. シンプルなHTMLページを作成する

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>    
        <script src="../<path_to_jquery>/jquery-1.9.1.min.js"></script>
        <script type="text/javascript">
            var uri = '/api/vs';
            $(document).ready(function () {
                $.getJSON(uri)
                .done(function (data) {
                    alert('got: ' + data);
                });
    
                $.ajax({
                    url: '/api/vs/5',
                    async: true,
                    success: function (data) {
                        alert('seccess1');
                        var res = parseInt(data);
                        alert('got res=' + res);
                    }
                });
            });
        </script>
    </head>
    <body>
    ....
    </body>
    </html>

違いを生んだポイントは、@ kheyaで述べられているように、WebApiconfig.Registerを最初の行に配置することでした
Rajat

追加したいのですが、あなたのapiコントローラー名は、CarControllerCarだけでなく)のようにControllerで終わる必要があります !!! 多くの人がそれを忘れて、「{0}という名前のコントローラに一致するタイプが見つかりませんでした」というエラーメッセージを取得します
1_bug

この良い答えでより効率的にするには、ステップ4、8、9を無視できます(これらはそれほど重要ではありません)。ステップ5と6の順序を入れ替えると、より意味があります(クラスを作成することをお勧めします)。クラスを使用する代わりにそれを使用してから作成してください)
HakanFıstıkMar

System.Web.Routing、System.Web.Net、およびSystem.Net.Httpへの参照を正確に追加しているのはどこですか?
gabed123

28

controllersフォルダの下に「WebApi Controller」を追加するとすぐに、Visual Studioが依存関係を自動的に処理します。

Visual Studioは、ASP.NET Web API 2の依存関係の完全なセットをプロジェクト 'MyTestProject'に追加しました。

プロジェクトのGlobal.asax.csファイルでは、ASP.NET Web APIを有効にするために追加の変更が必要になる場合があります。

  1. 次の名前空間参照を追加します。

    System.Web.Httpを使用します。System.Web.Routingを使用します。

  2. コードがまだApplication_Startメソッドを定義していない場合は、次のメソッドを追加します。

    protected void Application_Start(){}

  3. Application_Startメソッドの先頭に次の行を追加します。

    GlobalConfiguration.Configure(WebApiConfig.Register);


これは、これを実現する最も簡単な方法です。
アダム・スミス

1
ここでは機能しません。1. Nuget:Install-Package Microsoft.AspNet.WebApi2.新しい項目「Web API Controller Class(v2.1)」を追加します。結果:APIコントローラーが追加されますが、変更されませんApplication_Start。オーウィンと。
Artyom 2015

2
これは、vs2015-update 3とweb api 2コントローラーを追加する場合の正しい答えです。
ModChowdhury

2017年に行われましたが、WebApiアセンブリをアップグレードする必要がありました。WebApiConfigクラスも手動で作成する必要がありました。docs.microsoft.com/ en
johnny

22

以下の画像のようにnugetからインストールできます:

ここに画像の説明を入力してください

または、パッケージマネージャーコンソールで次のコマンドラインを実行します。

Install-Package Microsoft.AspNet.WebApi

3
それで、コントローラを追加する以外に何をする必要がありますか?これが私が最初にこの質問を投稿した理由です。チュートリアルはWeb APIプロジェクトを想定しているため、このチュートリアルは実際には言っていません。APIコントローラーを追加しましたが、ルーティングされません。
aknuds1

1
このチュートリアルは、既存のプロジェクトにWeb APIを追加することに関してはあまり役に立たなかったので、私の回答で概説されているように、Web APIプロジェクトから理解しました。
aknuds1

同意します。Webアプリプロジェクトテンプレートを使用する場合、この配管は既にインストールされているようです。
longda

@cuongle:web apiバージョン2.2はmvc 4でインストールされますか?MVC 4をサポートしていますか?
Thomas

20

MVCプロジェクトとWeb APIプロジェクトのマージを開始する前に、短所と長所を読んで、これらを異なるプロジェクトとして分離することをお勧めします。非常に重要なことの1つ(私自身)は、認証システムです。

MVCとWeb APIの両方で認証済みリクエストを使用する必要がある場合、Web APIはRESTfulである(セッションや単純なHTTPリクエストなどを保持する必要がない)ことを覚えておく必要がありますが、MVCはそうではありません。

実装の違いを確認するには、テンプレートからVisual Studio 2013で2つの異なるプロジェクトを作成します。1つはMVC用で、もう1つはWeb API用です(作成時に「個人認証」をオンにすることを忘れないでください)。AuthencationControllersには多くの違いがあります。

したがって、注意してください。


11

注:これは上記のこの回答の略称です

  1. NuGetパッケージマネージャーコンソールを開いて実行する

    PM> Install-Package Microsoft.AspNet.WebApi
  2. 参照を追加しSystem.Web.RoutingSystem.Web.NetそしてSystem.Net.Http既に存在するDLLでない場合

  3. 次のクラスを追加します

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  4. Application_Startメソッドがまだない場合は追加します(global.asax.csファイル内)

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. コントローラーフォルダーを右クリック>新しい項目を追加> Web> Web APIコントローラーを追加

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }  
        }
    }

System.Web.Routing、System.Web.Net、およびSystem.Net.Httpへの参照を正確に追加しているのはどこですか?
gabed123

1
[参照の追加]ダイアログからそのダイアログを開き、それらのアセンブリの名前を検索すると、それらが既に追加されている可能性が高くなります。(ただし念のため)
HakanFıstık19年

Application_Startメソッドは、Global.asax.csのグローバルクラスの一部であるはずですか?
gabed123

はい、私はそれを実証するために私の回答を更新しました、それはあなたがメモを書いたことです
HakanFıstık19年

1
@HakamFostokこれは私を助けました。ありがとうございました!
csichar

3

上記のソリューションは完全に機能します。下の図に示すように、プロジェクトテンプレートを選択する際にWeb APIオプションを選択したい

注:このソリューションは、Visual Studio 2013以降で動作します。元の質問は2012年に行われたもので2016年なので、Visual Studio 2013以降のソリューションを追加します。

Web APIオプションを示すプロジェクトテンプレート


2
Web APIを含むプロジェクトを作成する場合は、Web APIオプションを選択する方が簡単です。上記の返信で述べたように、オプションはすべての必要なファイルを作成します。
Sankar Krishnamoorthy

ここでの当面の問題は、あなたのソリューションだけで罰金ですが、あなたはVS 2012年にそのようにそれを行うことができないのVisual Studio 2012およびMVC 4である
netfed

これは良い点であり、VS 2013で上記の解決策を試しました。指摘してくれて@netfedに感謝します。
Sankar Krishnamoorthy 2016

こんにちは、私はMVCソリューションでAPI要素を機能させていますが、デフォルトではAPIソリューションとしてソリューションを実行しようとしました。しかし、デフォルトでMVCソリューションとして実行し、APIの場所などに移動してAPIを実行したいのですが、他の誰かがこの問題を抱えて解決できましたか?ありがとう
クリスクーパー

1

私は同じ問題を抱えていました、解決策はとても簡単でした

solotionを右クリックして、「Nuloget Package for Sulotionの管理」からMicrosoft.ASP.NET.WebApiをインストールします。

それだけのブームです;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.