web-dev-qa-db-ja.com

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

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

もっと詳細を提供する必要があるかどうか私に知らせてください。

348
aknuds1

実行する必要があった手順は次のとおりです。

  1. System.Web.Http.WebHostへの参照を追加してください。
  2. App_Start\WebApiConfig.csを追加します(下記のコードスニペットを参照)。
  3. System.Web.HttpにネームスペースGlobal.asax.csをインポートします。
  4. デフォルトのWebアプリケーションルートを登録するWebApiConfig.Register(GlobalConfiguration.Configuration)(ファイルGlobal.asax.cs内)、beforeMvcApplication.Application_Start()を呼び出します。
  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);
}

更新10.16.2015:

Wordはそれを持っています、NuGetパッケージMicrosoft.AspNet.WebApiは上で機能するためにインストールされなければなりません。

437
aknuds1

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

Install-Package Microsoft.AspNet.WebApi

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

Install-Package AspNetWebApi

もっと 詳細

76
cdeutsch

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

  1. NuGet Package Managerコンソールを開いて実行します

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. System.Web.RoutingSystem.Web.Net、およびSystem.Net.Http dllsへの参照がまだない場合は追加します。

  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>
    
59
kheya

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メソッドをまだ定義していない場合は、次のメソッドを追加します。

    保護されたvoid Application_Start(){}

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

    GlobalConfiguration.Configure(WebApiConfig.Register);

26
Teoman shipahi

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

enter image description here

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

Install-Package Microsoft.AspNet.WebApi
22
cuongle

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

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

実装の違いを調べるには、Visual Studio 2013でTemplatesから2つの異なるプロジェクトを作成するだけです。1つはMVC用で、もう1つはWeb API用です(作成中に "Individual Authentication"をオンにすることを忘れないでください)。あなたはAuthencationControllersの中で多くの違いを見るでしょう。

それで、注意してください。

19
Yarkov Anton

上記の解決策は完璧に機能します。下の図に示すように、プロジェクトテンプレートを選択しながらWeb APIオプションを選択することを好みます。

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

Project template showing web API option

注:これは単なる この回答 の略です

  1. NuGet Package Managerコンソールを開いて実行します

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. System.Web.RoutingSystem.Web.Net、およびSystem.Net.Http dllsへの参照がまだない場合は追加します。

  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. Global.asax.csファイルにApplication_Startメソッドがない場合は追加します。

    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";
            }  
        }
    }
    
3
Hakam Fostok

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

ソリューションを右クリックし、 "Manage Nuget Package for Solution"からMicrosoft.ASP.NET.WebApiをインストールします。

それが本だ。

0
tahaDev