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 Microsoft
Dalam tutorial ini, Anda mempelajari cara menggunakan ASP.NET MVC, dan Perutean URL, dengan versi Layanan Informasi Internet yang berbeda. Anda mempelajari berbagai strategi untuk menggunakan ASP.NET MVC dengan IIS 7.0 (mode klasik), IIS 6.0, dan versi IIS yang lebih lama.
Kerangka kerja MVC ASP.NET bergantung pada perutean ASP.NET untuk merutekan permintaan browser ke tindakan pengontrol. Untuk memanfaatkan perutean ASP.NET, Anda mungkin harus melakukan langkah-langkah konfigurasi tambahan di server web Anda. Semuanya tergantung pada versi Internet Information Services (IIS) dan mode pemrosesan permintaan untuk aplikasi Anda.
Berikut adalah ringkasan berbagai versi IIS:
- IIS 7.0 (mode terintegrasi) - Tidak ada konfigurasi khusus yang diperlukan untuk menggunakan perutean ASP.NET.
- IIS 7.0 (mode klasik) - Anda perlu melakukan konfigurasi khusus untuk menggunakan perutean ASP.NET.
- IIS 6.0 atau di bawahnya - Anda perlu melakukan konfigurasi khusus untuk menggunakan perutean ASP.NET.
Versi terbaru IIS adalah versi 7.5 (di Win7). IIS 7 dari IIS disertakan dengan Windows Server 2008 DAN VISTA/SP1 dan yang lebih tinggi. Anda juga dapat menginstal IIS 7.0 pada versi sistem operasi Vista apa pun kecuali Home Basic (lihat https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx).
IIS 7.0 mendukung dua mode untuk memproses permintaan. Anda dapat menggunakan mode terintegrasi atau mode klasik. Anda tidak perlu melakukan langkah-langkah konfigurasi khusus saat menggunakan IIS 7.0 dalam mode terintegrasi. Namun, Anda perlu melakukan konfigurasi tambahan saat menggunakan IIS 7.0 dalam mode klasik.
Microsoft Windows Server 2003 menyertakan IIS 6.0. Anda tidak dapat memutakhirkan IIS 6.0 ke IIS 7.0 saat menggunakan sistem operasi Windows Server 2003. Anda harus melakukan langkah-langkah konfigurasi tambahan saat menggunakan IIS 6.0.
Microsoft Windows XP Professional menyertakan IIS 5.1. Anda harus melakukan langkah-langkah konfigurasi tambahan saat menggunakan IIS 5.1.
Terakhir, Microsoft Windows 2000 dan Microsoft Windows 2000 Professional menyertakan IIS 5.0. Anda harus melakukan langkah-langkah konfigurasi tambahan saat menggunakan IIS 5.0.
Mode Terintegrasi versus Klasik
IIS 7.0 dapat memproses permintaan menggunakan dua mode pemrosesan permintaan yang berbeda: terintegrasi dan klasik. Mode terintegrasi memberikan performa yang lebih baik dan lebih banyak fitur. Mode klasik disertakan untuk kompatibilitas mundur dengan versi IIS yang lebih lama.
Mode pemrosesan permintaan ditentukan oleh kumpulan aplikasi. Anda dapat menentukan mode pemrosesan mana yang digunakan oleh aplikasi web tertentu dengan menentukan kumpulan aplikasi yang terkait dengan aplikasi. Ikuti langkah-langkah berikut:
- Luncurkan Pengelola Layanan Informasi Internet
- Di jendela Koneksi, pilih aplikasi
- Di jendela Tindakan, klik tautan Pengaturan Dasar untuk membuka kotak dialog Edit Aplikasi (lihat Gambar 1)
- Perhatikan kumpulan Aplikasi yang dipilih.
Secara default, IIS dikonfigurasi untuk mendukung dua kumpulan aplikasi: DefaultAppPool dan Classic .NET AppPool. Jika DefaultAppPool dipilih, maka aplikasi Anda berjalan dalam mode pemrosesan permintaan terintegrasi. Jika Classic .NET AppPool dipilih, aplikasi Anda berjalan dalam mode pemrosesan permintaan klasik.
Gambar 1: Mendeteksi mode pemrosesan permintaan (Klik untuk melihat gambar ukuran penuh)
Perhatikan bahwa Anda dapat mengubah mode pemrosesan permintaan dalam kotak dialog Edit Aplikasi. Klik tombol Pilih dan ubah kumpulan aplikasi yang terkait dengan aplikasi. Sadari bahwa ada masalah kompatibilitas saat mengubah aplikasi ASP.NET dari mode klasik ke terintegrasi. Untuk informasi lebih lanjut, baca artikel berikut:
- Memutakhirkan ASP.NET 1.1 ke IIS 7.0 di Windows Vista dan Windows Server 2008 -- https://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/upgrading-aspnet-11-to-iis-on-windows-vista-and-windows-server-2008
- ASP.NET Integrasi Dengan IIS 7.0 - https://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/aspnet-integration-with-iis
Jika aplikasi ASP.NET menggunakan DefaultAppPool, Maka Anda tidak perlu melakukan langkah-langkah tambahan untuk mendapatkan Perutean ASP.NET (dan karenanya ASP.NET MVC) berfungsi. Namun, jika aplikasi ASP.NET dikonfigurasi untuk menggunakan Classic .NET AppPool maka teruslah membaca, Anda memiliki lebih banyak pekerjaan yang harus dilakukan.
Menggunakan ASP.NET MVC dengan Versi IIS yang Lebih Lama
Jika Anda perlu menggunakan ASP.NET MVC dengan versi IIS yang lebih lama dari IIS 7.0, atau Anda perlu menggunakan IIS 7.0 dalam mode klasik, maka Anda memiliki dua opsi. Pertama, Anda dapat memodifikasi tabel rute untuk menggunakan ekstensi file. Misalnya, alih-alih meminta URL seperti /Store/Details, Anda akan meminta URL seperti /Store.aspx/Details.
Opsi kedua adalah membuat sesuatu yang disebut peta skrip kartubebas. Peta skrip kartubebas memungkinkan Anda memetakan setiap permintaan ke dalam kerangka kerja ASP.NET.
Jika Anda tidak memiliki akses ke server web Anda (misalnya, aplikasi MVC ASP.NET Anda sedang dihosting oleh Penyedia Layanan Internet) maka Anda harus menggunakan opsi pertama. Jika Anda tidak ingin mengubah tampilan URL Anda, dan Anda memiliki akses ke server web Anda, maka Anda dapat menggunakan opsi kedua.
Kami menjelajahi setiap opsi secara rinci di bagian berikut.
Menambahkan Ekstensi ke Tabel Rute
Cara termampu untuk mendapatkan Perutean ASP.NET untuk bekerja dengan versi IIS yang lebih lama adalah dengan memodifikasi tabel rute Anda di file Global.asax. File Global.asax default dan tidak dimodifikasi di Daftar 1 mengonfigurasi satu rute bernama rute Default.
Daftar 1 - Global.asax (tidak dimodifikasi)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class GlobalApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Rute Default yang dikonfigurasi di Daftar 1 memungkinkan Anda merutekan URL yang terlihat seperti ini:
/Home/Index
/Produk/Detail/3
/Produk
Sayangnya, versi IIS yang lebih lama tidak akan meneruskan permintaan ini ke kerangka kerja ASP.NET. Oleh karena itu, permintaan ini tidak akan dirutekan ke pengontrol. Misalnya, jika Anda membuat permintaan browser untuk URL /Home/Index, Anda akan mendapatkan halaman kesalahan di Gambar 2.
Gambar 2: Menerima kesalahan 404 Tidak Ditemukan (Klik untuk melihat gambar ukuran penuh)
Versi IIS yang lebih lama hanya memetakan permintaan tertentu ke kerangka kerja ASP.NET. Permintaan harus untuk URL dengan ekstensi file yang tepat. Misalnya, permintaan untuk /SomePage.aspx dipetakan ke kerangka kerja ASP.NET. Namun, permintaan untuk /SomePage.htm tidak.
Oleh karena itu, agar perutean ASP.NET berfungsi, kita harus memodifikasi rute Default sehingga menyertakan ekstensi file yang dipetakan ke kerangka kerja ASP.NET.
Ini dilakukan menggunakan skrip bernama registermvc.wsf. Ini disertakan dengan rilis ASP.NET MVC 1 di C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts, tetapi pada ASP.NET 2 skrip ini telah dipindahkan ke ASP.NET Futures.
Menjalankan skrip ini mendaftarkan ekstensi .mvc baru dengan IIS. Setelah mendaftarkan ekstensi .mvc, Anda dapat memodifikasi rute Anda di file Global.asax sehingga rute menggunakan ekstensi .mvc.
File Global.asax yang dimodifikasi di Listing 2 berfungsi dengan versi IIS yang lebih lama.
Daftar 2 - Global.asax (dimodifikasi dengan ekstensi)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Penting: ingatlah untuk membangun Aplikasi MVC ASP.NET Anda lagi setelah mengubah file Global.asax.
Ada dua perubahan penting pada file Global.asax di Listing 2. Sekarang ada dua rute yang ditentukan dalam Global.asax. Pola URL untuk rute Default, rute pertama, sekarang terlihat seperti:
{controller}.mvc/{action}/{id}
Penambahan ekstensi .mvc mengubah jenis file yang disadap modul perutean ASP.NET. Dengan perubahan ini, aplikasi MVC ASP.NET sekarang merutekan permintaan seperti berikut:
/Home.mvc/Index/
/Product.mvc/Details/3
/Product.mvc/
Rute kedua, rute Root, baru. Pola URL untuk rute Root ini adalah string kosong. Rute ini diperlukan untuk mencocokkan permintaan yang dibuat terhadap akar aplikasi Anda. Misalnya, rute Root akan cocok dengan permintaan yang terlihat seperti ini:
http://www.YourApplication.com/
Setelah melakukan modifikasi ini pada tabel rute, Anda harus memastikan bahwa semua tautan dalam aplikasi Anda kompatibel dengan pola URL baru ini. Dengan kata lain, pastikan bahwa semua tautan Anda menyertakan ekstensi .mvc. Jika Anda menggunakan metode pembantu Html.ActionLink() untuk menghasilkan tautan Anda, maka Anda tidak perlu membuat perubahan apa pun.
Alih-alih menggunakan skrip registermvc.wcf, Anda dapat menambahkan ekstensi baru ke IIS yang dipetakan ke kerangka kerja ASP.NET secara manual. Saat menambahkan ekstensi baru sendiri, pastikan bahwa kotak centang berlabel Verifikasi bahwa file ada tidak dicentang.
Server yang Dihosting
Anda tidak selalu memiliki akses ke server web Anda. Misalnya, jika Anda menghosting aplikasi MVC ASP.NET Anda menggunakan Penyedia Hosting Internet, maka Anda tidak akan selalu memiliki akses ke IIS.
Dalam hal ini, Anda harus menggunakan salah satu ekstensi file yang ada yang dipetakan ke kerangka kerja ASP.NET. Contoh ekstensi file yang dipetakan ke ASP.NET mencakup ekstensi .aspx, .axd, dan .ashx.
Misalnya, file Global.asax yang dimodifikasi di Listing 3 menggunakan ekstensi .aspx alih-alih ekstensi .mvc.
Daftar 3 - Global.asax (dimodifikasi dengan ekstensi .aspx)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.aspx/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
File Global.asax di Listing 3 sama persis dengan file Global.asax sebelumnya kecuali untuk fakta bahwa ia menggunakan ekstensi .aspx alih-alih ekstensi .mvc. Anda tidak perlu melakukan penyiapan apa pun di server web jarak jauh Anda untuk menggunakan ekstensi .aspx.
Membuat Peta Skrip Wildcard
Jika Anda tidak ingin mengubah URL untuk aplikasi MVC ASP.NET Anda, dan Anda memiliki akses ke server web Anda, maka Anda memiliki opsi tambahan. Anda dapat membuat peta skrip kartubebas yang memetakan semua permintaan ke server web ke kerangka kerja ASP.NET. Dengan demikian, Anda dapat menggunakan tabel rute ASP.NET MVC default dengan IIS 7.0 (dalam mode klasik) atau IIS 6.0.
Ketahuilah bahwa opsi ini menyebabkan IIS mencegat setiap permintaan yang dibuat terhadap server web. Ini termasuk permintaan untuk gambar, halaman ASP klasik, dan halaman HTML. Oleh karena itu, mengaktifkan peta skrip kartubebas ke ASP.NET memang memiliki implikasi performa.
Berikut cara Anda mengaktifkan peta skrip kartubebas untuk IIS 7.0:
- Pilih aplikasi Anda di jendela Koneksi
- Pastikan tampilan Fitur dipilih
- Klik dua kali tombol Pemetaan Handler
- Klik tautan Tambahkan Peta Skrip Wildcard (lihat Gambar 3)
- Masukkan jalur ke file aspnet_isapi.dll (Anda dapat menyalin jalur ini dari peta skrip PageHandlerFactory)
- Masukkan nama MVC
- Klik tombol OK
Gambar 3: Membuat peta skrip kartubebas dengan IIS 7.0(Klik untuk melihat gambar ukuran penuh)
Ikuti langkah-langkah ini untuk membuat peta skrip kartubebas dengan IIS 6.0:
- Klik kanan situs web dan pilih Properti
- Pilih tab Direktori Beranda
- Klik tombol Konfigurasi
- Pilih tab Pemetaan
- Klik tombol Sisipkan (lihat Gambar 4)
- Tempelkan jalur ke aspnet_isapi.dll ke bidang Executable (Anda dapat menyalin jalur ini dari peta skrip untuk file .aspx)
- Hapus centang pada kotak centang berlabel Verifikasi bahwa file ada
- Klik tombol OK
Gambar 4: Membuat peta skrip kartubebas dengan IIS 6.0(Klik untuk melihat gambar ukuran penuh)
Setelah mengaktifkan peta skrip kartubebas, Anda perlu memodifikasi tabel rute dalam file Global.asax sehingga menyertakan rute Root. Jika tidak, Anda akan mendapatkan halaman kesalahan di Gambar 5 saat membuat permintaan untuk halaman akar aplikasi Anda. Anda dapat menggunakan file Global.asax yang dimodifikasi di Daftar 4.
Gambar 5: Kesalahan rute Akar hilang (Klik untuk melihat gambar ukuran penuh)
Daftar 4 - Global.asax (dimodifikasi dengan rute Root)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Setelah mengaktifkan peta skrip kartubebas untuk IIS 7.0 atau IIS 6.0, Anda dapat membuat permintaan yang berfungsi dengan tabel rute default yang terlihat seperti ini:
/
/Home/Index
/Product/Details/3
/Produk
Ringkasan
Tujuan dari tutorial ini adalah untuk menjelaskan bagaimana Anda dapat menggunakan ASP.NET MVC saat menggunakan versi IIS yang lebih lama (atau IIS 7.0 dalam mode klasik). Kami membahas dua metode untuk mendapatkan perutean ASP.NET untuk bekerja dengan versi IIS yang lebih lama: Memodifikasi tabel rute default atau membuat peta skrip kartubebas.
Opsi pertama mengharuskan Anda untuk memodifikasi URL yang digunakan dalam aplikasi MVC ASP.NET Anda. Salah satu keuntungan yang sangat signifikan dari opsi pertama ini adalah Anda tidak memerlukan akses ke server web untuk memodifikasi tabel rute. Itu berarti bahwa Anda dapat menggunakan opsi pertama ini bahkan ketika menghosting aplikasi MVC ASP.NET Anda dengan perusahaan hosting Internet.
Opsi kedua adalah membuat peta skrip kartubebas. Keuntungan dari opsi kedua ini adalah Anda tidak perlu memodifikasi URL Anda. Kerugian dari opsi kedua ini adalah dapat memengaruhi performa aplikasi MVC ASP.NET Anda.