OWINを使用するホストASPを構築する.NET Web API 2


--Use OWIN to Self-Host ASP.NET Web API 2
テキストリンク:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
要旨:ASP.NET Web API 2は、RESTFULスタイルに適合し、オリジナルのHTMLプロトコル、IISとwindows serverサーバのデカップリングなど多くの優れた特性を備えています.OWINを使用してASPを構築する方法について説明します.NET Web API 2.翻訳の基礎の上で完備して、原文の中で完備していないいくつかの機能点を増加しました.updatedeleteコードを完備し、Fliddlerテストなどの技術点を使用します.
キーワード:OWIN,Web API,RESTFUL,デカップリングIIS,fliddler
 
This tutorial shows how to host ASP.NET Web API in a console application, using OWIN to self-host the Web API framework.
Open Web Interface for .NET (OWIN) defines an abstraction between .NET web servers and web applications. OWIN decouples the web application from the server, which makes OWIN ideal for self-hosting a web application in your own process, outside of IIS.
このチュートリアルでは、consoleアプリケーションでホストASPを使用する方法を示します.NET Web APIは,OWINを用いてホストからのWeb APIフレームワークを作成する.
Open Web Interface for .NET(OWIN)は、位置を定義する.NET web serversとwebアプリケーション間の抽象インタフェース.OWINは、ウェブアプリケーションとサーバをデカップリングし、IISおよびwindowsサーバから独立してウェブアプリケーションを存在させることができる.
 
Create a Console Application|windowフォームアプリケーションの作成
On the File menu, click New, then click Project. From Installed Templates, under Visual C#, click Windows and then click Console Application. Name the project “OwinSelfhostSample” and click OK.
ファイル->新規->プロジェクト、「インストール済みテンプレート」からwindowsをクリックしてconsoleアプリケーションをクリックします.「OwinSelfhostSample」と名付け、「OK」をクリック
使用OWIN 构建自宿主ASP.NET Web API 2_第1张图片 Add the Web API and OWIN Packages|Web APIとOWINパッケージの追加
From the Tools menu, click Library Package Manager, then click Package Manager Console. In the Package Manager Console window, enter the following command:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
This will install the WebAPI OWIN selfhost package and all the required OWIN packages.
ツールメニューから、「リソースパッケージマネージャ」をクリックし、「パッケージ管理コマンド」をクリックします.コマンドウィンドウで、次のコマンドを入力します.
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
この手順では、WebAPI OWINホストパッケージと必要なすべてのOWINパッケージがインストールされます.
使用OWIN 构建自宿主ASP.NET Web API 2_第2张图片
Configure Web API for Self-Host|ホストWeb API構成
In Solution Explorer, right click the project and select Add / Class to add a new class. Name the class Startup.
ソリューションマネージャで、プロジェクトを右クリックし、「追加」>「クラス」を選択し、新しいクラスを追加します.Startupという名前
使用OWIN 构建自宿主ASP.NET Web API 2_第3张图片
Replace all of the boilerplate code in this file with the following:
次のコードを使用してすべての内容を置き換えます.
using Owin; using System.Web.Http; 
namespace OwinSelfhostSample { 
    public class Startup 
    { 
        // This code configures Web API. The Startup class is specified as a type
        // parameter in the WebApp.Start method.
        public void Configuration(IAppBuilder appBuilder) 
        { 
            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration(); 
            config.Routes.MapHttpRoute( 
                name: "DefaultApi", 
                routeTemplate: "api/{controller}/{id}", 
                defaults: new { id = RouteParameter.Optional } 
            ); 

            appBuilder.UseWebApi(config); 
        } 
    } } 

Modelsレイヤの追加
ソリューションでは、フォルダModelsを新規作成し、3つのクラスを新規作成します.コードは次のとおりです.
Productクラス
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace OwinSelfhostSample
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}

ProductRepositoryクラス
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace OwinSelfhostSample
{
    public class ProductRepository:IProductRepository
    {
        private List<Product> products = new List<Product>();
        private int _indexId = 1;

        public ProductRepository()
        {
               products. Add(new Product {Id = 1, Name = "Tomato soup", Category = "Groceries", Price = 1.39M });
               products.Add(new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M });
               products.Add(new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M });
        }
        public IEnumerable<Product> GetAll()
        {
            return products;
        }
        public Product Get(int id)
        {
            return products.Find(p => p.Id == id);
        }
        public Product Add(Product item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            item.Id = _indexId++;
            products.Add(item);
            return item;
        }

        public bool Update(Product item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            int index = products.FindIndex(p => p.Id == item.Id);
            if (index == -1)
            {
                return false;
            }
            products.RemoveAt(index);
            products.Add(item);
            return true;
        }

        public void Remove(int id)
        {
            products.RemoveAll(p => p.Id == id);
        }
    }
}


IProductRepositoryインタフェース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OwinSelfhostSample
{
    public interface IProductRepository
    {
        IEnumerable<Product> GetAll();
        Product Get(int id);
        Product Add(Product item);
        void Remove(int id);
        bool Update(Product item);
    }
}

Add a Web API Controller|Web APIコントローラの追加
Next, add a Web API controller class. In Solution Explorer, right click the project and select Add / Class to add a new class. Name the classValuesController.
Replace all of the boilerplate code in this file with the following:
次に、Web APIコントローラを追加します.ソリューションでプロジェクトを右クリックし、「クラスの追加」>「クラス」を選択してクラスを追加します.ProductsControllerという名前です.コードは次のとおりです.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;

namespace OwinSelfhostSample
{
    public class ProductsController : ApiController
    {
        static readonly IProductRepository repository = new ProductRepository();

        // GET /api/products
        public IEnumerable<Product> GetAllProducts()
        {
            return repository.GetAll();
        }

        // GET /api/products/id
        public Product GetProduct(int id)
        {
            var product = repository.Get(id);
            if (product == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return product;
        }

        //GET  /api/products/?category=category
        public IEnumerable<Product> GetProductsByCategory(string category)
        {
            return repository
                .GetAll()
                .Where(r => string.Equals(r.Category, category))
                .Select(r => r);
        }

        // POST api/products insert
        public void Post([FromBody]Product item)
        {
            repository.Add(item);
        }

        // PUT api/products/5 update
        public void Put(int id, Product product)
        {
            product.Id = id;
            if (!repository.Update(product))
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
        }

        // DELETE api/products/5 
        public void Delete(int id)
        {
            Product item = repository.Get(id);
            if (item == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            repository.Remove(id);
        }
    } 
}

Start the OWIN Host and Make a Request Using HttpClient|OWINホストを開き、HttpClientを使用してリクエストを開始
Replace all of the boilerplate code in the Program.cs file with the following:
次のコードを使用してProgramを置き換えます.csファイルの内容:
using Microsoft.Owin.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace OwinSelfhostSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string baseAddress = "http://localhost:9000/";

            // Start OWIN host 
            WebApp.Start<Startup>(url: baseAddress);

            // Create HttpCient and make a request to api/products 
            HttpClient client = new HttpClient();

            var response = client.GetAsync(baseAddress + "api/products").Result;

            Console.WriteLine(response);
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
  

            Console.ReadLine(); 
        }
    }
}

Running the Application|プログラムの実行
使用OWIN 构建自宿主ASP.NET Web API 2_第4张图片
Flidderテストの使用
Flidderのダウンロードアドレス:https://www.telerik.com/download/fiddler
Component->Parsedラベル
GET, http://localhost:9000/api/productsを返します.
HTTP/1.1 200 OK
Content-Length: 183
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Tue, 10 May 2016 04:06:30 GMT
 
[{"Id":1,"Name":"Tomato soup","Category":"Groceries","Price":1.39},{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75},{"Id":3,"Name":"Hammer","Category":"Hardware","Price":16.99}]
小結
本稿では,VS 2013,OWINなどのツールを用いてホストRESTFULスタイルのWeb APIを構築することについて述べる.Flidderを使用してテストを行いました.このテスト項目ではメモリデータのみを使用しています.実際のプロジェクトでは、データベースのマウント、ビジネスロジックの採用をより多く考慮し、原理は同じです.
 
Ps読者の承認が重要ですので、役に立つと思ったら、トップをクリックしてください.