web-dev-qa-db-ja.com

.NETがMVC asp.netアプリケーションで2つのweb.configファイルを生成するのはなぜですか?

MVC 3が初めてです。2つのweb.configファイルを使用する理由は何ですか?

enter image description here

2つのweb.configファイルの違いは何ですか?また、それぞれの目的と機能は何ですか?

36
Datta

これに追加したいのは、/ Viewsフォルダー内のWeb.Configが、ビューの名前空間を明確に宣言する(そうでないとしても)すばらしい方法であることです。Webアプリケーションでは、ほとんどすべてのビューがViewModelを取得できる(実際のモデルの代わりに)それに渡されます。 @modelの後に完全な名前空間を宣言するか、同じ@using App.Web.Viewmodelsを使用するのは面倒です。この方法では、すべてのビューモデルが自動的に使用可能になり、実際のモデルをスコープ内に取得するために余分な作業を行う必要があります。

また、通常、アプリケーションは、ビューでの使用に特化した多くの拡張メソッドを取得できます(HTMLヘルパーが思い浮かびます)。 /Views/Web.Configでこの拡張クラスに名前空間を定義することは理にかなっています。そうすれば、「IntelliSenseが@ Html.ImageLink()メソッドを見つけられないのはなぜだろう?」

20
Céryl Wiltink

これは、web.configファイル継承の例です。 [〜#〜] msdn [〜#〜] から

ASP.NET構成ファイルをアプリケーションディレクトリ全体に配布して、継承階層でASP.NETアプリケーションを構成できます。この構造により、上位ディレクトリレベルの構成設定に影響を与えることなく、アプリケーションが適切なディレクトリレベルで必要とする構成の詳細レベルを実現できます。

具体的には、MVCプロジェクトの場合、Viewサブディレクトリのweb.configを使用して、.cshtml/.aspxファイルを調整します。サブフォルダーでweb.configファイルを使用して、アプリの独自のルートから継承された設定を拡張、オーバーライド、削除し、階層をさらに上に移動できます。 machine.configまで

/Views/web.configの一般的な構成には次のものがあります。

  • かみそりとaspxビューに直接アクセスしようとする要求をブロックします(これらは適切なルートを介してコントローラーから提供される必要があります)。 404応答は、そのような直接要求に対して構成されます。
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
  • ビューページに対して デフォルトのインポートネームスペース を設定するには、それ以外の場合はusingを介して明示的に追加する必要があります。ここで、一般的なカスタムアセンブリの名前空間(カスタムhtmlヘルパー拡張機能など)を追加できます。
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    ...
  • MVCのanti-xss RequestValidationフィルターを構成するには。構成に追加されたコメントは、これを最もよく説明しています。
<!--
    Enabling request validation in view pages would cause validation to occur
    after the input has already been processed by the controller. By default
    MVC performs request validation before a controller processes the input.
    To change this behavior apply the ValidateInputAttribute to a
    controller or action.
 -->
53
StuartLC

Web.configファイルはViewsフォルダーに存在し、コントローラー以外の手段によるビューへのアクセスを防止します。 MVC設計パターンでは、コントローラーはリクエストをルーティングし、呼び出し元のクライアントにレンダリングされたビューを返すことになっています。

localhost9999://Home/Index.cshtmlに直接アクセスできないことを意味します。

5
Sunny_Sid

ビューには独自の設定があります。エリアを扱っている場合、複数の設定について知るようになります。

実際のところ、ビューのWeb.Configは、ビューへの直接アクセスをブロックするなど、ビュー固有の構成用です。

編集1:コメントで尋ねられたより多くの説明。

Web.configファイルはViewsフォルダーに存在し、コントローラー以外の手段によるビューへのアクセスを防止します。 MVC設計パターンでは、コントローラーはリクエストをルーティングし、呼び出し元のクライアントにレンダリングされたビューを返すことになっています。これは、localhost9999://Home/Index.cshtmlに直接アクセスできないことを意味します。

5
Sunny_Sid

ASP.NET構成は、web.configファイル(XMLファイル)に保存されます。

これらのファイルは、ASP.NETアプリケーションの多くのディレクトリに表示できます。これらは、メモ帳で編集できるという事実に基づいて、展開前でもアプリケーションの動作を構成するのに役立ちます。また、コードと構成データを分離し続けます。

すべてのweb.configファイルは、それが存在するディレクトリとすべての子サブディレクトリに適用されます。子ディレクトリのWeb.configファイルを使用して、親のweb.configファイルをオーバーライドできます。

Location要素を使用して、個々のファイルまたはディレクトリをオーバーライドするオプションがあります。 [〜#〜] link [〜#〜] を参照してください

設定の継承ルールは、箔のようです。

最初に、通常systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\にあるmachine.configファイルがあります

同じディレクトリに、マシンで実行されているすべてのasp.netアプリケーションの設定を定義する「マスター」web.configファイルが存在します。

次に、アプリケーションに存在するweb.configファイルが来ます。

詳細:

ASP.NET構成の概要

ASP.NET構成ファイルの階層と継承

3
e4rthdog

プロジェクトの設定を簡単な方法で配布することに加えて、実行時に有効にして公開することができます。ホイールに片手。見る:

Web.config変換

変換構文

1
Fernando Arce