ASP.NET Web API開編例紹介

10684 ワード

ASP.NET Web API開編例紹介
 
ASP.NET Web API
私の初心者にとってASP.NET Web APIというフレームワークはよく知られていないし、よく知っています.
見知らぬのはASP.NET Web APIは新しいフレームワークですが、このフレームワークが一つのプロジェクトで果たした役割についてはまだよく分かりません.ここでも結論を出さないでください.正直に言うと、私がしたくないのではなく、自分で模索して理解してみるしかありません.
おなじみはASP.NET Web APIとASP.NET MVCのフレームワークは最初は似たようなところがありました.
話は多くなくて、みんなは私と一緒にASPを勉強します.NET Web APIという新しいフレームワークでしょう.
 
ASP.NET Web APIデモ例
環境インフラストラクチャ
まず、クラスライブラリプロジェクトをCommonと名付け、サンプルコードを以下のように定義します.
コード1-1
namespaceCommon
{
   publicclassProduct
   {
        publicstringProductID { get; set; }
        publicstringProductName { get; set; }
        publicstringProductCategory { get; set; }
   }
}

WebHostホスト環境の構築
次に空のASPを作成します.NET WEBアプリはWebHostと名付けられていますが、ここではASPについて説明します.NET Web APIフレームワークは独立したフレームワークにすぎず、独立して実行することはできないため、ホスト環境が必要であり、新しく作成したWEBアプリケーションは以下の例でASPを一時的に担持する.NET Web APIフレームワークを実行します.
 
 
リファレンスセット
Newtonsoft.Json.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Packages\Newtonsoft.Json.4.5.6\libet40Newtonsoft.Json.dll
 
System.Net.Http.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.dll
 
System.Net.Http.Formatting.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll
 
System.Web.Http.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.dll
 
System.Web.Http.WebHost.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.WebHost.dll
 
Common.dll(プロジェクト参照)
あるいは、このような参照方法を採用します.
 
(上記のディレクトリの場所にNewtonsoft.Json.dllがない場合は、ファイルを検索して手動で参照できます.)
次に、Webアプリケーション処理クラスGlobalを構築します.asax、およびそのApplication_Start()メソッドにルーティングを登録します.サンプルコードは次のとおりです.
コード1-2
usingSystem.Web.Http;
 
namespaceWebHost
{
   publicclassGlobal : System.Web.HttpApplication
   {
        protectedvoidApplication_Start(objectsender, EventArgse)
        {
            GlobalConfiguration.Configuration.Routes.MapHttpRoute(
              "DefaultAPI", "api/{controller}/{id}", new { controller="product",id=RouteParameter.Optional });
        }
   }
}

ルーティング登録が完了したら、ProductControllerという名前のWeb APIコントローラを新規作成する必要があります.サンプルコードは次のとおりです.
コード1-3
usingSystem.Web.Http;
usingCommon;
 
namespaceWebHost.Controllers
{
   publicclassProductController:ApiController
   {
        privatestaticListproducts;
 
        staticProductController()
        {
            products=newList();
            products.AddRange(
                newProduct[] 
                {
                    newProduct(){ ProductID="001", ProductName="  ",ProductCategory="    "},
                    newProduct(){ ProductID="002", ProductName="《.NET    —             》", ProductCategory="  "}
                });
        }
 
        publicIEnumerableGet(stringid=null)
        {
            returnfromproductinproductswhereproduct.ProductID==id||string.IsNullOrEmpty(id) selectproduct;
        }
   }
}

コード1-3でProductControllerコントローラがApiControllerから継承されているのを見ましたが、ここではASP.NET MVCフレームワークのコントローラに対する処理と同様に,要求が到来しルーティング処理が行われた後,Web APIフレームワークは現在のプロジェクトで参照されているすべてのプログラムセットをすべて検索し,ApiControllerから継承されたタイプを検索し,xmlファイルにキャッシュするが,予想されるペアが後で検証されるかどうかは不明であるが,ここで述べる.
注意深い友人の可能性は、ルーティング登録時に対応するActionのルーティングパラメータがないことを発見する可能性がありますが、実はここがWeb APIフレームワークの1つの違いで、Httpリクエスト方法に基づいてActionの方法を決定しますが、ブラウザのデフォルトのリクエスト方法はHttp-getなので、私たちはこの時直接プロジェクトを実行することができます.
図2
 
SelfHostの作成
次に、SelfHostホスト環境におけるASPについて説明する.NET Web APIフレームワークの使用例.
まず、コンソールアプリケーションの名前をSelfHost、SelfHost環境プロジェクトのプログラムセットリファレンスと前述のWebHostプロジェクトリファレンスが唯一異なるのはSystemです.Web.Http.WebHost.dllプログラムセットをSystemに変更する.Web.Http.SelfHost.dllプログラムセットは、参照パスが変わらず、参照内の拡張バーで追加することもできます.
 
次に、SelfHostでどのようなことをする必要があるかを見てみましょう.まず、ルーティングを登録する必要があります.これは最初に行うことです.サンプルコードは次のとおりです.
コード1-4
usingSystem.Web.Http;
usingSystem.Web.Http.SelfHost;
 
namespaceSelfHost
{
   classProgram
   {
        staticvoidMain(string[] args)
        {
            HttpSelfHostConfigurationselfHostConfiguration=
                newHttpSelfHostConfiguration("http://localhost/selfhost");
            using (HttpSelfHostServerselfHostServer=newHttpSelfHostServer(selfHostConfiguration))
            {
                selfHostServer.Configuration.Routes.MapHttpRoute(
                    "DefaultApi", "api/{controller}/{id}", new { id=RouteParameter.Optional});
 
                selfHostServer.OpenAsync();
 
                Console.WriteLine("           ");
                Console.Read();
            }
        }
   }
}

ここで簡単に説明すると、1-4コードのHttpSelfHostConfigurationオブジェクトの例ではベースアドレスが設定されており、HttpSelfHostConfigurationタイプはHttpConfigurationタイプから継承され、HttpConfigurationタイプは比較的重要なタイプであり、WebAPIフレームワークのほとんどの構成情報はこのタイプの例で設定されている.後続の紙面で述べられる.
HttpSelfHostServerオブジェクトは、SelfHostホスト環境において重要な役割を果たしており、リクエストなどの一連の操作(SelfHost環境におけるWebAPIフレームワークのパイプモデルの「蛇口」であるため)を処理しており、ここでは少し理解すればよいので、後のパイプの紙面でその神秘的なベールが明らかになる.
引き続き下を見ると、HttpSelfHostServerオブジェクトインスタンスのコンフィギュレーションプロパティのRoutesプロパティがルーティングの登録を提供しています.このセクションでは、後述するルーティングについて説明します.
その後、サービスリスニングを開き、リクエストの処理を待つのを見ました.(ここでの傍受/処理要求は,真の要求を処理するのではなく,すでに要求がカプセル化されたオブジェクトを処理し,パイプの紙面で説明する)
 
ルーティング登録後、Web APIコントローラを新規作成します.上記のWebHostの一部の内容のようにコピーしますが、コントローラのコードを少し変更します.サンプルコードは以下の通りです.
コード1-5
usingSystem.Web.Http;
usingCommon;
 
namespaceSelfHost.Controllers
{
   publicclassProductController:ApiController
   {
        privatestaticListproducts;
 
        staticProductController()
        {
            products=newList();
            products.AddRange(
                newProduct[] 
                {
                    newProduct(){ ProductID="001", ProductName="  ",ProductCategory="    "},
                    newProduct(){ ProductID="002", ProductName="《.NET    —             》", ProductCategory="  "}
                });
        }
 
 
        publicIEnumerableGet(stringid=null)
        {
            returnfromproductinproductswhereproduct.ProductID==id||string.IsNullOrEmpty(id) selectproduct;
        }
 
 
        publicvoidDelete(stringid)
        {
            products.Remove(products.First(product=>product.ProductID==id));
        }
 
        publicvoidPost(Productproduct)
        {
            products.Add(product);
        }
 
        publicvoidPut(Productproduct)
        {
            Delete(product.ProductID);
            Post(product);
        }
   }
}

コード1〜5においてコントローラに追加されたいくつかのActionメソッドについても、それぞれHttpリクエストメソッドに対応している.これにより,添削改ざんの基礎機能が実現される.では、アクセスするクライアントも必要です.
 
Clinetの作成
コンソールアプリケーションの名前をClinetとして再構築し、次のプログラムセット参照を追加します.
 
Newtonsoft.Json.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Packages\Newtonsoft.Json.4.5.6\libet40Newtonsoft.Json.dll
 
System.Net.Http.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.dll
 
System.Net.Http.Formatting.dllパス:C:Program FilesMicrosoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll
 
Common.dll(プロジェクト参照)
次に、ClientプロジェクトでSelfHost環境のリソースにアクセスする例を示します.サンプルコードは次のとおりです.
コード1-6
usingCommon;
usingSystem.Net.Http;
 
namespaceClient
{
   classProgram
   {
        staticvoidMain(string[] args)
        {
            AsyncProcess();
            Console.Read();
        }
 
        privateasyncstaticvoidAsyncProcess()
        {
            HttpClienthttpClient=newHttpClient();
 
            //        
            HttpResponseMessageresponseMessage=
                awaithttpClient.GetAsync("http://localhost/selfhost/api/product");
            IEnumerableproducts=awaitresponseMessage.Content.ReadAsAsync>();
            OutputProductInfo(products);
 
 
            //    
            Productproduct=newProduct()
            {
                ProductID="003",
                ProductName="《ASP.NET Web API 2     》",
                ProductCategory="   "
            };
            awaithttpClient.PostAsJsonAsync("http://localhost/selfhost/api/product", product);
            responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");
            products=awaitresponseMessage.Content.ReadAsAsync>();
            OutputProductInfo(products);
 
            //        
            responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product/003");
            product= (awaitresponseMessage.Content.ReadAsAsync>()).First();
            product.ProductCategory="  ";
            awaithttpClient.PutAsJsonAsync("http://localhost/selfhost/api/product", product);
            responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");
            products=awaitresponseMessage.Content.ReadAsAsync>();
            OutputProductInfo(products);
 
            //      
            awaithttpClient.DeleteAsync("http://localhost/selfhost/api/product/001");
            responseMessage=awaithttpClient.GetAsync("http://localhost/selfhost/api/product");
            products=awaitresponseMessage.Content.ReadAsAsync>();
            OutputProductInfo(products);
 
        }
 
        privatestaticvoidOutputProductInfo(IEnumerableproducts)
        {
            foreach (Productproductinproducts)
            {
                Console.WriteLine(
                    "ProductID:{0},ProductName:{1},ProductCategorm:{2}",
                    product.ProductID, product.ProductName, product.ProductCategory);
            }
            Console.WriteLine("—————————————————————————");
        }
   }
}

コード1-5の多くのタイプについては、後述するページで説明しますが、ここでは説明しません.最終的な例の結果を見てみましょう.
まず、SelfHostプロジェクトを実行し、インタフェースを待って、次の図3のようにClientプロジェクトを実行してSelfHostのリソースにアクセスします.結果を図4に示す
図3
図4
参考資料:http://www.cnblogs.com/artech/p/web-api-sample.html
蒋大書の例を真似て簡略化して調整したのは、後の紙面でこの例が役に立つからだ.
 
ここでは最初は国内ではWeb APIに関する書籍資料はほとんどなく、もちろん海外にあるのはありますが、英語版です.英語の基礎がない私には死の猶予を言い渡すのと同じで、唯一の活路は翻訳ツールで少しずつ見ることです.
蒋大の新作が出てきたのは幸いだ.さもないと、Web APIを学びたいのは本当に道がない.すでに前の3章を見終わって、多くの知識点を収穫してとても全面的で、後で私はいくつかまで勉強してすべてみんなと分かち合います.