Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Mike Wasson
Tutorial ini menunjukkan cara menghosting API web di dalam aplikasi konsol. ASP.NET Web API tidak memerlukan IIS. Anda dapat menghost sendiri API web dalam proses host Anda sendiri.
Aplikasi baru harus menggunakan OWIN untuk menghost sendiri Web API. Lihat Menggunakan OWIN untuk Self-Host ASP.NET Web API 2.
Versi perangkat lunak yang digunakan dalam tutorial
- WEB API 1
- Visual Studio 2012
Membuat Proyek Aplikasi Konsol
Mulai Visual Studio dan pilih Proyek Baru dari halaman Mulai . Atau, dari menu File , pilih Baru lalu Proyek.
Di panel Templat , pilih Templat terinstal dan perluas simpul Visual C# . Di bawah Visual C#, pilih Windows. Dalam daftar templat proyek, pilih Aplikasi Konsol. Beri nama proyek "SelfHost" dan klik OK.
Mengatur Kerangka Kerja Target (Visual Studio 2010)
Jika Anda menggunakan Visual Studio 2010, ubah kerangka kerja target menjadi .NET Framework 4.0. (Secara default, templat proyek menargetkan Profil Klien .Net Framework.)
Di Penjelajah Solusi, klik kanan proyek dan pilih Properti. Di daftar dropdown Kerangka kerja target, ubah kerangka kerja target menjadi .NET Framework 4.0. Saat diminta untuk menerapkan perubahan, klik Ya.
Menginstal Pengelola Paket NuGet
NuGet Package Manager adalah cara term mudah untuk menambahkan rakitan Api Web ke proyek non-ASP.NET.
Untuk memeriksa apakah Pengelola Paket NuGet diinstal, klik menu Alat di Visual Studio. Jika Anda melihat item menu yang disebut NuGet Package Manager, maka Anda memiliki NuGet Package Manager.
Untuk menginstal NuGet Package Manager:
- Mulai Visual Studio.
- Dari menu Alat, pilih Ekstensi dan Updates.
- Dalam dialog Ekstensi dan Updates, pilih Online.
- Jika Anda tidak melihat "Pengelola Paket NuGet", ketik "manajer paket nuget" di kotak pencarian.
- Pilih Manajer Paket NuGet dan klik Unduh.
- Setelah pengunduhan selesai, Anda akan diminta untuk menginstal.
- Setelah penginstalan selesai, Anda mungkin diminta untuk memulai ulang Visual Studio.
Menambahkan Paket Web API NuGet
Setelah NuGet Package Manager diinstal, tambahkan paket Self-Host API Web ke proyek Anda.
- Dari menu Alat , pilih Pengelola Paket NuGet. Catatan: Jika Anda tidak melihat item menu ini, pastikan NuGet Package Manager diinstal dengan benar.
- Pilih Kelola Paket NuGet untuk Solusi
- Dalam dialog Kelola Paket NugGet , pilih Online.
- Dalam kotak pencarian, ketik "Microsoft.AspNet.WebApi.SelfHost".
- Pilih paket ASP.NET Web API Self Host dan klik Instal.
- Setelah paket diinstal, klik Tutup untuk menutup dialog.
Catatan
Pastikan untuk menginstal paket bernama Microsoft.AspNet.WebApi.SelfHost, bukan AspNetWebApi.SelfHost.
Membuat Model dan Pengontrol
Tutorial ini menggunakan model dan kelas pengontrol yang sama dengan tutorial Memulai .
Tambahkan kelas publik bernama Product
.
namespace SelfHost
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
Tambahkan kelas publik bernama ProductsController
. Dapatkan kelas ini dari System.Web.Http.ApiController.
namespace SelfHost
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
};
public IEnumerable<Product> GetAllProducts()
{
return products;
}
public Product GetProductById(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return product;
}
public IEnumerable<Product> GetProductsByCategory(string category)
{
return products.Where(p => string.Equals(p.Category, category,
StringComparison.OrdinalIgnoreCase));
}
}
}
Untuk informasi selengkapnya tentang kode di pengontrol ini, lihat tutorial Memulai . Pengontrol ini mendefinisikan tiga tindakan GET:
URI | Deskripsi |
---|---|
/api/products | Dapatkan daftar semua produk. |
/api/products/id | Dapatkan produk berdasarkan ID. |
/api/products/?category=category | Dapatkan daftar produk berdasarkan kategori. |
Menghosting API Web
Buka file Program.cs dan tambahkan pernyataan penggunaan berikut:
using System.Web.Http;
using System.Web.Http.SelfHost;
Tambahkan kode berikut ke kelas Program .
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
(Opsional) Menambahkan Reservasi Namespace URL HTTP
Aplikasi ini mendengarkan http://localhost:8080/
. Secara default, mendengarkan di alamat HTTP tertentu memerlukan hak istimewa administrator. Ketika Anda menjalankan tutorial, oleh karena itu, Anda mungkin mendapatkan kesalahan ini: "HTTP tidak dapat mendaftarkan URL http://+:8080/" Ada dua cara untuk menghindari kesalahan ini:
- Jalankan Visual Studio dengan izin administrator yang ditinggikan, atau
- Gunakan Netsh.exe untuk memberikan izin akun Anda untuk memesan URL.
Untuk menggunakan Netsh.exe, buka prompt perintah dengan hak istimewa administrator dan masukkan perintah berikut:perintah berikut:
netsh http add urlacl url=http://+:8080/ user=machine\username
di mana machine\username adalah akun pengguna Anda.
Ketika Anda selesai menghost sendiri, pastikan untuk menghapus reservasi:
netsh http delete urlacl url=http://+:8080/
Memanggil API Web dari Aplikasi Klien (C#)
Mari kita tulis aplikasi konsol sederhana yang memanggil API web.
Tambahkan proyek aplikasi konsol baru ke solusi:
- Di Penjelajah Solusi, klik kanan solusi dan pilih Tambahkan Proyek Baru.
- Buat aplikasi konsol baru bernama "ClientApp".
Gunakan NuGet Package Manager untuk menambahkan paket ASP.NET Web API Core Libraries:
- Dari menu Alat, pilih Pengelola Paket NuGet.
- Pilih Kelola Paket NuGet untuk Solusi
- Dalam dialog Kelola Paket NuGet , pilih Online.
- Dalam kotak pencarian, ketik "Microsoft.AspNet.WebApi.Client".
- Pilih paket Microsoft ASP.NET Web API Client Libraries dan klik Instal.
Tambahkan referensi di ClientApp ke proyek SelfHost:
- Di Penjelajah Solusi, klik kanan proyek ClientApp.
- Pilih Tambahkan Referensi.
- Dalam dialog Manajer Referensi , di bawah Solusi, pilih Proyek.
- Pilih proyek SelfHost.
- Klik OK.
Buka file Client/Program.cs. Tambahkan pernyataan penggunaan berikut:
using System.Net.Http;
Tambahkan instans HttpClient statis:
namespace Client
{
class Program
{
static HttpClient client = new HttpClient();
}
}
Tambahkan metode berikut untuk mencantumkan semua produk, mencantumkan produk menurut ID, dan mencantumkan produk menurut kategori.
static void ListAllProducts()
{
HttpResponseMessage resp = client.GetAsync("api/products").Result;
resp.EnsureSuccessStatusCode();
var products = resp.Content.ReadAsAsync<IEnumerable<SelfHost.Product>>().Result;
foreach (var p in products)
{
Console.WriteLine("{0} {1} {2} ({3})", p.Id, p.Name, p.Price, p.Category);
}
}
static void ListProduct(int id)
{
var resp = client.GetAsync(string.Format("api/products/{0}", id)).Result;
resp.EnsureSuccessStatusCode();
var product = resp.Content.ReadAsAsync<SelfHost.Product>().Result;
Console.WriteLine("ID {0}: {1}", id, product.Name);
}
static void ListProducts(string category)
{
Console.WriteLine("Products in '{0}':", category);
string query = string.Format("api/products?category={0}", category);
var resp = client.GetAsync(query).Result;
resp.EnsureSuccessStatusCode();
var products = resp.Content.ReadAsAsync<IEnumerable<SelfHost.Product>>().Result;
foreach (var product in products)
{
Console.WriteLine(product.Name);
}
}
Masing-masing metode ini mengikuti pola yang sama:
- Hubungi HttpClient.GetAsync untuk mengirim permintaan GET ke URI yang sesuai.
- Hubungi HttpResponseMessage.EnsureSuccessStatusCode. Metode ini memberikan pengecualian jika status respons HTTP adalah kode kesalahan.
- Panggil ReadAsAsync<T> untuk mendeserialisasi jenis CLR dari respons HTTP. Metode ini adalah metode ekstensi, yang ditentukan dalam System.Net.Http.HttpContentExtensions.
Metode GetAsync dan ReadAsync keduanya asinkron. Mereka mengembalikan objek Tugas yang mewakili operasi asinkron. Mendapatkan properti Hasil memblokir utas hingga operasi selesai.
Untuk informasi selengkapnya tentang menggunakan HttpClient, termasuk cara melakukan panggilan non-pemblokiran, lihat Memanggil API Web Dari Klien .NET.
Sebelum memanggil metode ini, atur properti BaseAddress pada instans HttpClient ke "http://localhost:8080
". Contohnya:
static void Main(string[] args)
{
client.BaseAddress = new Uri("http://localhost:8080");
ListAllProducts();
ListProduct(1);
ListProducts("toys");
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
Ini harus menghasilkan yang berikut ini. (Ingatlah untuk menjalankan aplikasi SelfHost terlebih dahulu.)
1 Tomato Soup 1.0 (Groceries)
2 Yo-yo 3.75 (Toys)
3 Hammer 16.99 (Hardware)
ID 1: Tomato Soup
Products in 'toys':
Yo-yo
Press Enter to quit.