Bagikan melalui


Mengonfigurasi ASP.NET Web API 2

Topik ini menjelaskan cara mengonfigurasi ASP.NET Web API.

Pengaturan Konfigurasi

Pengaturan konfigurasi API Web ditentukan di kelas HttpConfiguration .

Anggota Deskripsi
DependencyResolver Mengaktifkan injeksi dependensi untuk pengontrol. Lihat Menggunakan Pemecah Dependensi API Web.
Filter Filter tindakan.
Formatters Pemformat jenis media.
IncludeErrorDetailPolicy Menentukan apakah server harus menyertakan detail kesalahan, seperti pesan pengecualian dan jejak tumpukan, dalam pesan respons HTTP. Lihat IncludeErrorDetailPolicy.
Penginisialisasi Fungsi yang melakukan inisialisasi akhir HttpConfiguration.
MessageHandlers Penangan pesan HTTP.
ParameterBindingRules Kumpulan aturan untuk mengikat parameter pada tindakan pengontrol.
Properti Tas properti generik.
Rute Pengumpulan rute. Lihat Perutean di ASP.NET Web API.
Layanan Pengumpulan layanan. Lihat Layanan.

Prasyarat

Visual Studio 2017 Edisi Komunitas, Profesional, atau Perusahaan.

Mengonfigurasi WEB API dengan ASP.NET Hosting

Dalam aplikasi ASP.NET, konfigurasikan API Web dengan memanggil GlobalConfiguration.Configure dalam metode Application_Start . Metode Konfigurasi mengambil delegasi dengan satu parameter jenis HttpConfiguration. Lakukan semua konfigurasi Anda di dalam delegasi.

Berikut adalah contoh menggunakan delegasi anonim:

using System.Web.Http;
namespace WebApplication1
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(config =>
            {
                config.MapHttpAttributeRoutes();

                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
            });
        }
    }
}

Di Visual Studio 2017, templat proyek "ASP.NET Web Application" secara otomatis menyiapkan kode konfigurasi, jika Anda memilih "Web API" dalam dialog Proyek ASP.NET Baru .

Cuplikan layar dialog Proyek NET titik S S P Baru, dengan kotak centang Web A P I dipilih untuk menyiapkan kode konfigurasi secara otomatis.

Templat proyek membuat file bernama WebApiConfig.cs di dalam folder App_Start. File kode ini menentukan delegasi tempat Anda harus meletakkan kode konfigurasi API Web Anda.

Cuplikan layar dialog Penjelajah Solusi, dengan Web A P I Config dot c s diuraikan dalam warna merah, di dalam folder App Start.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

Templat proyek juga menambahkan kode yang memanggil delegasi dari Application_Start.

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

Mengonfigurasi API Web dengan Self-Hosting OWIN

Jika Anda menghost sendiri dengan OWIN, buat instans HttpConfiguration baru. Lakukan konfigurasi apa pun pada instans ini, lalu teruskan instans ke metode ekstensi Owin.UseWebApi .

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
        HttpConfiguration config = new HttpConfiguration(); 

        config.Routes.MapHttpRoute( 
            name: "DefaultApi", 
            routeTemplate: "api/{controller}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
        ); 

        appBuilder.UseWebApi(config); 
    } 
}

Tutorial Menggunakan OWIN untuk Self-Host ASP.NET Web API 2 menunjukkan langkah-langkah lengkap.

Layanan API Web Global

Koleksi HttpConfiguration.Services berisi sekumpulan layanan global yang digunakan API Web untuk melakukan berbagai tugas, seperti pemilihan pengontrol dan negosiasi konten.

Catatan

Kumpulan Layanan bukan mekanisme tujuan umum untuk penemuan layanan atau injeksi dependensi. Ini hanya menyimpan jenis layanan yang diketahui oleh kerangka kerja API Web.

Koleksi Layanan diinisialisasi dengan serangkaian layanan default, dan Anda dapat menyediakan implementasi kustom Anda sendiri. Beberapa layanan mendukung beberapa instans, sementara yang lain hanya dapat memiliki satu instans. (Namun, Anda juga dapat menyediakan layanan di tingkat pengontrol; lihat Konfigurasi Per Pengontrol.

Layanan Single-Instance

Layanan Deskripsi
IActionValueBinder Mendapatkan pengikatan untuk parameter.
IApiExplorer Mendapatkan deskripsi API yang diekspos oleh aplikasi. Lihat Membuat Halaman Bantuan untuk API Web.
IAssembliesResolver Mendapatkan daftar rakitan untuk aplikasi. Lihat Perutean dan Pemilihan Tindakan.
IBodyModelValidator Memvalidasi model yang dibaca dari isi permintaan oleh pemformat jenis media.
IContentNegotiator Melakukan negosiasi konten.
IDocumentationProvider Menyediakan dokumentasi untuk API. Defaultnya adalah null. Lihat Membuat Halaman Bantuan untuk API Web.
IHostBufferPolicySelector Menunjukkan apakah host harus buffer badan entitas pesan HTTP.
IHttpActionInvoker Memanggil tindakan pengontrol. Lihat Perutean dan Pemilihan Tindakan.
IHttpActionSelector Memilih tindakan pengontrol. Lihat Perutean dan Pemilihan Tindakan.
IHttpControllerActivator Mengaktifkan pengontrol. Lihat Perutean dan Pemilihan Tindakan.
IHttpControllerSelector Memilih pengontrol. Lihat Perutean dan Pemilihan Tindakan.
IHttpControllerTypeResolver Menyediakan daftar jenis pengontrol API Web dalam aplikasi. Lihat Perutean dan Pemilihan Tindakan.
ITraceManager Menginisialisasi kerangka kerja pelacakan. Lihat Pelacakan di ASP.NET Web API.
ITraceWriter Menyediakan penulis jejak. Defaultnya adalah penulis jejak "no-op". Lihat Pelacakan di ASP.NET Web API.
IModelValidatorCache Menyediakan cache validator model.

Layanan Multiple-Instance

Layanan Deskripsi
IFilterProvider Mengembalikan daftar filter untuk tindakan pengontrol.
ModelBinderProvider Mengembalikan pengikat model untuk jenis tertentu.
ModelMetadataProvider Menyediakan metadata untuk model.
ModelValidatorProvider Menyediakan validator untuk model.
ValueProviderFactory Membuat penyedia nilai. Untuk informasi selengkapnya, lihat posting blog Mike Stall Cara membuat penyedia nilai kustom di WebAPI

Untuk menambahkan implementasi kustom ke layanan multi-instans, panggil Tambahkan atau Sisipkan pada koleksi Layanan :

config.Services.Add(typeof(IFilterProvider), new MyFilterProvider());

Untuk mengganti layanan instans tunggal dengan implementasi kustom, panggil Ganti pada koleksi Layanan :

config.Services.Replace(typeof(ITraceWriter), new MyTraceWriter());

Konfigurasi Per-Controller

Anda dapat mengambil alih pengaturan berikut berdasarkan per pengontrol:

  • Pemformat jenis media
  • Aturan pengikatan parameter
  • Layanan

Untuk melakukannya, tentukan atribut kustom yang mengimplementasikan antarmuka IControllerConfiguration . Kemudian terapkan atribut ke pengontrol.

Contoh berikut menggantikan pemformat jenis media default dengan pemformat kustom.

using System;
using System.Web.Http;
using System.Web.Http.Controllers;

namespace WebApplication1.Controllers
{

    public class UseMyFormatterAttribute : Attribute, IControllerConfiguration
    {
        public void Initialize(HttpControllerSettings settings,
            HttpControllerDescriptor descriptor)
        {
            // Clear the formatters list.
            settings.Formatters.Clear();

            // Add a custom media-type formatter.
            settings.Formatters.Add(new MyFormatter());
        }
    }

    [UseMyFormatter]
    public class ValuesController : ApiController
    {
        // Controller methods not shown...
    }
}

Metode IControllerConfiguration.Initialize mengambil dua parameter:

  • Objek HttpControllerSettings
  • Objek HttpControllerDescriptor

HttpControllerDescriptor berisi deskripsi pengontrol, yang dapat Anda periksa untuk tujuan informasi (misalnya, untuk membedakan antara dua pengontrol).

Gunakan objek HttpControllerSettings untuk mengonfigurasi pengontrol. Objek ini berisi subset parameter konfigurasi yang dapat Anda ambil alih berdasarkan per pengontrol. Pengaturan apa pun yang tidak Anda ubah default ke objek HttpConfiguration global.