web-dev-qa-db-ja.com

OWIN Startup.csクラスを使用してすべての構成をそこに移動する場合、Global.asax.csファイルが必要ですか?

たとえば、MVC w/Individual Accountsテンプレートから作成されたまったく新しいASP.NET MVC 5アプリケーションで、Global.asax.csクラスを削除し、その構成コードをStartup.csConfiguration()メソッドに移動すると次のようになります。

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つの異なるクラスで他の構成を行わないことです起動と設定に。

181
rjoll

Startup.ConfigurationはApplication_Startよりも少し遅れて呼び出されますが、ほとんどの場合、違いはそれほど重要ではないと思います。

Global.asaxで他のコードを保持した主な理由は次のとおりです。

  1. MVCの以前のバージョンとの一貫性。 (現在、誰もがこのコードを見つけることを期待しています。)
  2. 他のイベントハンドラーを追加する機能。 Global.asaxでは、Session_StartやApplication_Errorなどの他のメソッドを処理できます。
  3. さまざまな認証シナリオの正確さ。 Startup.Configurationメソッドは、binディレクトリにMicrosoft.Owin.Host.SystemWeb.dllがある場合にのみ呼び出されます。このDLLを削除すると、Startup.Configurationの呼び出しが静かに停止しますが、これは理解しにくい場合があります。

いくつかのシナリオにはこのDLLが含まれていないため、3番目の理由がデフォルトでこのアプローチを採用しなかった最も重要な理由だと思います。また、無関係なコードの場所を無効にすることなく認証アプローチを変更できるのは良いことです(ルート登録)が配置されます。

ただし、これらの理由がシナリオに当てはまらない場合は、このアプローチを使用しても問題ないと思います。

161
dmatson

完全な手順をお探しの場合:OWINベースのIISホスト型Web APIを作成する場合は、次の手順に従ってください。

  1. File -> New -> Project
  2. ダイアログで、Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
  3. ソリューションで、右クリックして、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
    
  4. 次のパッケージをインストールします。

    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動詞を表す)で注釈を付けます。

26

これは、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

従来の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を使用したASP.NET

まず、 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サーバーで実行できます。

  • OwinHost パッケージを使用して、Katana Webサーバーでアプリケーションをセルフホストできます。
  • Microsoft.Owin.Host.SystemWeb パッケージは、ミドルウェアを正しいライフタイムイベントに内部的にサブスクライブすることにより、統合モードでIIS7 +でOWINアプリケーションをホストするために使用されます。

すべてが非常に紛らわしいのは、Global.asaxがOWIN Startupクラスと一緒にサポートされている一方で、両方とも同様のことができるということです。たとえば、Global.asaxにCORSを実装し、OWINミドルウェアを使用した認証を実装すると、本当に混乱します。

私の経験則では、Global.asaxファイルを一緒に削除して、OWINを追加する必要があるときはいつでもStartupを使用するようにします。

ASP.NET Core

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の使用はオプションですが、 完全にサポート です。

6
Alexander Derck