Katakanlah misalnya dalam aplikasi ASP.NET MVC 5 baru yang dibuat dari MVC dengan templat Akun Perorangan, jika saya menghapus Global.asax.cs
kelas dan memindahkan kode konfigurasinya ke Startup.cs
Configuration()
metode sebagai berikut, apa kerugiannya?
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
}
}
Keuntungannya bagi saya adalah ketika meningkatkan aplikasi ASP.NET 4 ke ASP.NET 5 dan menggunakan potongan-potongan yang sekarang harus dikonfigurasi di kelas Startup.cs, saya tidak melakukan injeksi ketergantungan dan konfigurasi lainnya di dua kelas berbeda yang tampaknya terkait untuk memulai, dan konfigurasi.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
owin
iliketocode
sumber
sumber
AreaRegistration.RegisterAllAreas();
Menyebabkan kesalahan bagi saya karena metode ini tidak diizinkan untuk digunakan selama startup seperti ini, hanya diApplication_Start
. Namun, aplikasi saya adalah API dan metode ini tampaknya hanya berguna untuk aplikasi MVC: stackoverflow.com/questions/18404637/…Jawaban:
Startup.Configuration dipanggil sedikit lebih lambat daripada Application_Start, tapi saya rasa perbedaannya tidak akan terlalu berarti dalam kebanyakan kasus.
Saya percaya alasan utama kami menyimpan kode lain di Global.asax adalah:
Saya pikir alasan ketiga adalah yang paling penting yang kami tidak mengambil pendekatan ini secara default, karena beberapa skenario tidak termasuk memiliki DLL ini, dan itu baik untuk dapat mengubah pendekatan otentikasi tanpa memvalidasi lokasi di mana kode yang tidak terkait (seperti pendaftaran rute) ditempatkan.
Tetapi jika tidak ada alasan yang berlaku dalam skenario Anda, saya pikir Anda akan baik-baik saja menggunakan pendekatan ini.
sumber
WebApi.Owin
paket nuget. Saya keliru mengharapkan ketergantungan untuk memasukkan semuanya untuk dijalankan di IIS. Tidak tahu mengapa saya berpikir bahwa karena saya ingin startup Owin untuk melepaskan ketergantungan IIS di tempat pertama.Bagi mereka yang mencari langkah-langkah lengkap: Jika Anda mencari untuk membuat API web berbasis OWIN, IIS host, langkah-langkah ini akan membawa Anda ke sana:
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
Pada solusinya, klik kanan, tambahkan
Project -> Web -> ASP.NET Web Application
(penargetan .NET 4.6)3.1 Sekarang Di templat ASP.NET 4.5, pilih Kosong sebagai templat
3.2 Ini menciptakan solusi kosong dengan dua paket nuget:
Instal paket-paket berikut:
Untuk OWIN:
Kemudian tambahkan Startup.cs dengan metode Konfigurasi:
Sekarang tambahkan kelas yang mewarisi dari
ApiController
, beri catatan denganRoutePrefix
atribut dan metode tindakan denganRoute + HttpGet/PutPost
(mewakili kata kerja Http Anda setelah) dan Anda harus baik untuk pergisumber
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Setelah saya menambahkannya ke api saya, saya dapat menghapus global.asax.Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
menunjukkan paket-instal tidak ditemukan kesalahan. Dapat menginstal paket iniInstall-Package WebApiContrib.Formatting.Razor 2.3.0
, dengan tanpa yang terakhir.0[assembly:OwinStartup(typeof(namespace.Startup))]
harus di atas bagian namespace kalau tidak memberikan kesalahan berikutAssembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.
Ini adalah pemahaman saya tentang bagaimana memulai / hosting aplikasi web berkembang karena itu semua cukup membingungkan untuk diikuti. Ringkasan kecil:
1. Classic ASP.NET: Tuliskan hanya kode aplikasi untuk dijalankan pada langkah terakhir dari pipa IIS wajib
2. ASP.NET dengan OWIN: Konfigurasikan server web .NET dan tulis kode aplikasi Anda. Tidak lagi secara langsung digabungkan ke IIS, jadi Anda tidak lagi dipaksa untuk menggunakannya.
3. ASP.NET Core: Konfigurasikan host dan server web untuk menggunakan dan menulis kode aplikasi Anda. Tidak lagi wajib untuk menggunakan server .NET jika Anda menargetkan .NET Core alih-alih .NET Framework.
Sekarang saya akan sedikit lebih detail tentang cara kerjanya dan kelas mana yang digunakan untuk memulai aplikasi:
ASP.NET klasik
Aplikasi ASP.NET klasik memiliki
Global.asax
file sebagai titik masuk. Aplikasi ini hanya dapat dijalankan di IIS dan kode Anda dieksekusi di akhir pipa IIS (jadi IIS bertanggung jawab untuk CORS, otentikasi ... sebelum kode Anda berjalan). Sejak IIS 7 Anda dapat menjalankan aplikasi Anda dalam mode terintegrasi yang mengintegrasikan runtime ASP.NET ke IIS. Hal ini memungkinkan kode untuk fungsi configure yang tidak mungkin dilakukan sebelumnya (atau hanya dalam IIS sendiri) seperti url menulis ulang dalamApplication_Start
acara AndaGlobal.asax
file atau menggunakan baru<system.webserver>
bagian dalam Andaweb.config
berkas.ASP.NET dengan OWIN
Pertama-tama OWIN bukan perpustakaan tetapi spesifikasi tentang bagaimana .NET web server (misalnya IIS) berinteraksi dengan aplikasi web. Microsoft sendiri memiliki implementasi OWIN yang disebut proyek Katana (didistribusikan melalui beberapa paket NuGet yang berbeda). Implementasi ini memberikan Anda pada dasarnya menyusun middleware dengan cara plug-and-play untuk membuat pipa untuk server web (selain hanya pipa ASP.NET di IIS7 + seperti pada poin di atas) daripada diikat ke pipa IIS ( tetapi sekarang Anda menggunakan komponen middleware untuk CORS, komponen middleware untuk otentikasi ...). Karena itu, aplikasi Anda tidak secara khusus digabungkan ke IIS dan Anda dapat menjalankannya di .server Web NET, misalnya:
IAppBuilder
antarmuka yang Anda temui diStartup
kelas dan beberapa komponen middleware OWIN (OMC) yang disediakan oleh Microsoft. MenggunakanIAppBuilder
Hal yang membuat semuanya sangat membingungkan adalah yang
Global.asax
masih didukung bersama denganStartup
kelas OWIN , sementara mereka berdua dapat melakukan hal serupa. Misalnya Anda dapat menerapkan CORSGlobal.asax
dan otentikasi menggunakan middleware OWIN yang menjadi sangat membingungkan.Aturan praktis saya adalah menghapus semua
Global.asax
file yang mendukung penggunaanStartup
kapan pun saya perlu menambahkan OWIN.ASP.NET Core
ASP.NET Core adalah evolusi berikutnya dan sekarang Anda dapat menargetkan .NET Core atau .NET Framework. Ketika Anda menargetkan .NET Core, Anda dapat menjalankan aplikasi pada host apa pun yang mendukung .NET Standard. Ini berarti Anda tidak lagi terbatas pada server .NET (seperti pada poin sebelumnya), tetapi dapat meng-host aplikasi Anda dalam wadah Docker, server web linux, IIS ...
Titik masuk untuk aplikasi web ASP.NET Core adalah
Program.cs
file. Di sana Anda mengkonfigurasi host Anda dan sekali lagi menentukanStartup
kelas Anda di mana Anda mengkonfigurasi pipa Anda. Menggunakan OWIN (dengan menggunakanIAppBuilder.UseOwin
metode ekstensi) adalah opsional, tetapi didukung penuh .sumber