Powiedzmy na przykład, że w zupełnie nowej aplikacji ASP.NET MVC 5 wykonanej z szablonu MVC z indywidualnymi kontami, jeśli usunę Global.asax.cs
klasę i przeniosę jej kod konfiguracyjny do Startup.cs
Configuration()
metody w następujący sposób, jakie są wady?
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);
}
}
Zaletą dla mnie jest to, że podczas aktualizacji aplikacji ASP.NET 4 do ASP.NET 5 i używania elementów, które teraz muszą być skonfigurowane w klasie Startup.cs, nie robię wstrzykiwania zależności i innej konfiguracji w dwóch różnych klasach, które wydają się powiązane do uruchomienia i konfiguracji.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
owin
iliketocode
źródło
źródło
AreaRegistration.RegisterAllAreas();
Wystąpił dla mnie błąd, ponieważ tej metody nie można używać podczas takiego uruchamiania, tylko wApplication_Start
. Jednak moja aplikacja jest interfejsem API i ta metoda jest najwyraźniej przydatna tylko dla aplikacji MVC: stackoverflow.com/questions/18404637/…Odpowiedzi:
Startup.Configuracja jest wywoływana nieco później niż Application_Start, ale nie sądzę, że różnica w większości przypadków będzie miała znaczenie.
Uważam, że główne powody, dla których trzymaliśmy drugi kod w Global.asax to:
Myślę, że trzeci powód jest najważniejszy, ponieważ domyślnie nie przyjęliśmy tego podejścia, ponieważ niektóre scenariusze nie obejmują posiadania tej biblioteki DLL i miło jest móc zmieniać metody uwierzytelniania bez unieważniania lokalizacji, w której niepowiązany kod (np. rejestracja trasy).
Ale jeśli żaden z tych powodów nie ma zastosowania w twoim scenariuszu, myślę, że przydałoby Ci się to podejście.
źródło
WebApi.Owin
pakiet nuget. Niesłusznie oczekiwałem, że zależność obejmie wszystko, co ma działać na IIS. Nie mam pojęcia, dlaczego tak myślałem, skoro chciałem, aby startup Owin rozdzielił zależność IIS.Dla tych, którzy szukają kompletnych kroków: jeśli chcesz utworzyć oparty na OWIN, internetowy interfejs API hostowany przez IIS, te kroki powinny Cię tam zapewnić:
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
W rozwiązaniu kliknij prawym przyciskiem myszy, dodaj
Project -> Web -> ASP.NET Web Application
(celowanie .NET 4.6)3.1 Teraz W szablonach ASP.NET 4.5 wybierz Pusty jako szablon
3.2 To tworzy puste rozwiązanie z dwoma pakietami nuget:
Zainstaluj następujące pakiety:
W przypadku OWIN:
Następnie dodaj Startup.cs z metodą konfiguracji:
Teraz dodaj klasę, która dziedziczy
ApiController
, opatrz ją adnotacjąRoutePrefix
i metodą akcjiRoute + HttpGet/PutPost
(reprezentującą czasownik HTTP, którego szukasz) i powinieneś już iśćźródło
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Kiedy dodałem to do mojego interfejsu API, byłem w stanie usunąć global.asax.Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
pokazuje błąd nie znaleziono pakietu instalacyjnego. Zainstalowałem ten pakiet działający zInstall-Package WebApiContrib.Formatting.Razor 2.3.0
, więc bez ostatniego. 0[assembly:OwinStartup(typeof(namespace.Startup))]
Część musi znajdować się powyżej części przestrzeni nazw, w przeciwnym razie pojawia się następujący błądAssembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.
Rozumiem, jak ewoluowało uruchamianie / hosting aplikacji WWW, ponieważ jest to dość mylące. Małe podsumowanie:
1. Klasyczny program ASP.NET: Napisz tylko kod aplikacji, aby uruchomić go w ostatnim kroku obowiązkowego potoku IIS
2. ASP.NET z OWIN: Skonfiguruj serwer .NET i napisz kod aplikacji. Nie jest już bezpośrednio sprzężony z IIS, więc nie musisz już go używać.
3. ASP.NET Core: Skonfiguruj hosta i serwer WWW do używania i pisania kodu aplikacji. Nie jest już obowiązkowe korzystanie z serwera .NET, jeśli celem jest .NET Core zamiast pełnego .NET Framework.
Teraz zajmę się bardziej szczegółowo tym, jak to działa i jakie klasy są używane do uruchomienia aplikacji:
Klasyczny ASP.NET
Klasyczne aplikacje ASP.NET mają
Global.asax
plik jako punkt wejścia. Te aplikacje mogą być uruchamiane tylko w IIS, a Twój kod jest wykonywany na końcu potoku IIS (więc IIS jest odpowiedzialny za CORS, uwierzytelnianie ... zanim Twój kod się uruchomi). Od IIS 7 możesz uruchomić aplikację w trybie zintegrowanym, który integruje środowisko wykonawcze ASP.NET z IIS. Umożliwia to Twojemu kodowi skonfigurowanie funkcji, które wcześniej nie były możliwe (lub tylko w samych IIS), takich jak przepisywanieApplication_Start
adresów URL w przypadkuGlobal.asax
pliku lub użycie nowej<system.webserver>
sekcji wweb.config
pliku.ASP.NET z OWIN
Przede wszystkim OWIN nie jest biblioteką, ale specyfikacją interakcji serwerów .NET (na przykład IIS) z aplikacjami internetowymi. Same Microsoft mają implementację OWIN o nazwie projekt Katana (dystrybuowanej przez kilka różnych pakietów NuGet). Ta implementacja zapewnia
IAppBuilder
interfejs napotkany wStartup
klasie oraz niektóre komponenty oprogramowania pośredniego OWIN (OMC) dostarczone przez Microsoft. Za pomocąIAppBuilder
zasadniczo tworzysz oprogramowanie pośrednie w trybie plug-and-play, aby utworzyć potok dla serwera WWW (oprócz tylko potoku ASP.NET w IIS7 + jak w powyższym punkcie) zamiast być powiązanym z potokiem IIS (ale teraz używasz komponent oprogramowania pośredniego dla CORS, komponent oprogramowania pośredniego do uwierzytelniania ...). Z tego powodu twoja aplikacja nie jest już specjalnie sprzężona z IIS i możesz ją uruchomić na dowolnym serwerze .NET Webserver, na przykład:To, co sprawia, że wszystko jest tak mylące, to to, że
Global.asax
nadal jest obsługiwane wraz zStartup
klasą OWIN , podczas gdy oboje mogą robić podobne rzeczy. Na przykład możesz zaimplementować CORSGlobal.asax
i uwierzytelnianie przy użyciu oprogramowania pośredniego OWIN, co staje się naprawdę mylące.Moją ogólną zasadą jest całkowite usunięcie
Global.asax
pliku na korzyść korzystania zaStartup
każdym razem, gdy muszę dodać OWIN.ASP.NET Core
ASP.NET Core to kolejna ewolucja, teraz możesz kierować reklamy na platformę .NET Core lub pełną platformę .NET Framework. Gdy celujesz w .NET Core, możesz uruchomić aplikację na dowolnym hoście, który obsługuje .NET Standard. Oznacza to, że nie jesteś już ograniczony do serwera .NET (jak w poprzednim punkcie), ale możesz hostować swoją aplikację w kontenerach Docker, serwerze linux, IIS ...
Punktem wejścia dla aplikacji sieci web ASP.NET Core jest
Program.cs
plik. Tam konfigurujesz hosta i ponownie określaszStartup
klasę, w której konfigurujesz potok. Korzystanie z OWIN (przy użyciuIAppBuilder.UseOwin
metody rozszerzenia) jest opcjonalne, ale w pełni obsługiwane .źródło