たとえば、MVC w/Individual Accountsテンプレートから作成されたまったく新しいASP.NET MVC 5アプリケーションで、Global.asax.cs
クラスを削除し、その構成コードをStartup.cs
Configuration()
メソッドに移動すると次のようになります。
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);
}
}
私にとっての利点は、ASP.NET 4アプリケーションをASP.NET 5にアップグレードし、Startup.csクラスで構成する必要がある部分を使用するとき、依存関係の注入と、関連すると思われる2つの異なるクラスで他の構成を行わないことです起動と設定に。
Startup.ConfigurationはApplication_Startよりも少し遅れて呼び出されますが、ほとんどの場合、違いはそれほど重要ではないと思います。
Global.asaxで他のコードを保持した主な理由は次のとおりです。
いくつかのシナリオにはこのDLLが含まれていないため、3番目の理由がデフォルトでこのアプローチを採用しなかった最も重要な理由だと思います。また、無関係なコードの場所を無効にすることなく認証アプローチを変更できるのは良いことです(ルート登録)が配置されます。
ただし、これらの理由がシナリオに当てはまらない場合は、このアプローチを使用しても問題ないと思います。
完全な手順をお探しの場合:OWINベースのIISホスト型Web APIを作成する場合は、次の手順に従ってください。
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
ソリューションで、右クリックして、Project -> Web -> ASP.NET Web Application
を追加します(ターゲット.NET 4.6)
3.1これで、ASP.NET 4.5テンプレートで、テンプレートとして空を選択します
3.2これにより、2つのnugetパッケージで空のソリューションが作成されます。
Microsoft.CodeDom.Providers.DotNetCompilerPlatform v 1.0.0
Microsoft.Net.Compilers v 1.0.0
次のパッケージをインストールします。
Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.3
Install-Package Microsoft.AspNet.WebApi -Version 5.2.3
Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
OWINの場合:
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
次に、ConfigurationメソッドでStartup.csを追加します。
[Assembly:OwinStartup(typeof(namespace.Startup))]
public class Startup
{
/// <summary> Configurations the specified application. </summary>
/// <param name="app">The application.</param>
public static void Configuration(IAppBuilder app)
{
var httpConfiguration = CreateHttpConfiguration();
app
.UseWebApi(httpConfiguration);
}
/// <summary> Creates the HTTP configuration. </summary>
/// <returns> An <see cref="HttpConfiguration"/> to bootstrap the hosted API </returns>
public static HttpConfiguration CreateHttpConfiguration()
{
var httpConfiguration = new HttpConfiguration();
httpConfiguration.MapHttpAttributeRoutes();
return httpConfiguration;
}
}
ここで、ApiController
を継承するクラスを追加し、RoutePrefix
属性とアクションメソッドにRoute + HttpGet/PutPost
(後のHttp動詞を表す)で注釈を付けます。
これは、Webアプリケーションの起動/ホストがどのように進化したかを理解することです。簡単な要約:
1。従来のASP.NET:必須のIISパイプラインの最後のステップで実行するアプリケーションコードのみを記述する
2。 OWINを使用したASP.NET:.NET Webサーバーを構成し、アプリケーションコードを記述します。 IISに直接結合されなくなったため、使用を余儀なくされました。
3。 ASP.NET Core:ホストとWebサーバーの両方を構成して、アプリケーションコードを使用および記述します。完全な.NET Frameworkではなく.NET Coreをターゲットとする場合、.NET Webサーバーを使用する必要はなくなりました。
次に、それがどのように機能し、どのクラスがアプリケーションの起動に使用されるかについて、もう少し詳しく説明します。
従来のASP.NETアプリケーションには、エントリポイントとしてGlobal.asax
ファイルがあります。これらのアプリケーションはIISでのみ実行でき、コードはIISパイプラインの最後で実行されます(したがって、コードが実行される前にIISがCORS、認証を担当します) 。 IIS 7以降では、ASP.NETランタイムをIISに統合する統合モードでアプリケーションを実行できます。これにより、コードは、 rl rewriting のような以前(またはIISでのみ)不可能だった機能をApplication_Start
ファイルのGlobal.asax
イベントで設定したり、新しい<system.webserver>
セクションを使用したりできます。 web.config
ファイル。
まず、 OWIN はライブラリではなく、.NET Webサーバー(IISなど)がWebアプリケーションと対話する方法の仕様です。 Microsoft自身が project Katana (いくつかの異なるNuGetパッケージを通じて配布されています)と呼ばれるOWINの実装を持っています。この実装は、IAppBuilder
クラスで遭遇するStartup
インターフェイスと、Microsoftが提供するOWINミドルウェアコンポーネント(OMC)を提供します。 IAppBuilder
を使用すると、基本的にIISに結び付けられるのではなく、プラグアンドプレイでミドルウェアを構成して、Webサーバーのパイプラインを作成します(上記のIIS7 +のASP.NETパイプラインのみ)。パイプライン(ただし、今ではCORSにはミドルウェアコンポーネント、認証にはミドルウェアコンポーネントを使用しています...)。このため、アプリケーションはIISに明確に結合されなくなり、次のように.NET Webサーバーで実行できます。
すべてが非常に紛らわしいのは、Global.asax
がOWIN Startup
クラスと一緒にサポートされている一方で、両方とも同様のことができるということです。たとえば、Global.asax
にCORSを実装し、OWINミドルウェアを使用した認証を実装すると、本当に混乱します。
私の経験則では、Global.asax
ファイルを一緒に削除して、OWINを追加する必要があるときはいつでもStartup
を使用するようにします。
ASP.NET Coreは次の進化であり、.NET Coreまたは完全な.NET Frameworkのいずれかをターゲットにできるようになりました。 .NET Coreをターゲットにすると、.NET Standardをサポートする任意のホストでアプリケーションを実行できます。これは、(以前のポイントのように).NET Webサーバーに制限されなくなったが、Dockerコンテナー、Linux Webサーバー、IISでアプリケーションをホストできることを意味します。
ASP.NET Core Webアプリケーションのエントリポイントは、Program.cs
ファイルです。そこでホストを設定し、パイプラインを設定するStartup
クラスを再度指定します。 (IAppBuilder.UseOwin
拡張メソッドを使用した)OWINの使用はオプションですが、 完全にサポート です。