ウェブ設定された設定要素


私は実際には階層の詳細について知っていた多くの人々に会っていないWeb.config ファイルと利用方法location 要素.実際、私は、複数の人々がWeb.config ファイル名Views マイMVCアプリケーションのフォルダ?ASP . NETコアプロジェクトでさえWeb.config ファイル(発行時に生成される)と、まだASPの実行を制御する機能の一部を使用することができます.ネットコアウェブサイト.あなたがこのポストを終えたとき、あなたは専門家でなければなりません.
忘れるならWeb.config これが原因で欠点があるXMLファイルであること、IISのウェブサイトをホストするとき、それはかなり強力な機能です.

ウェブ設定階層


ディスカッションを始める前にlocation 要素、複数の有する概念をご紹介したいと思いますWeb.config ファイル.新しいプロジェクトのルートで生成されたものをすでに知っています.

このファイルは、アプリケーションの設定とHTTPモジュールやハンドラのように、このアプリケーションの多くの機能を制御します.実際のアプリケーションでは、通常、サブディレクトリを持っています.これはURLにリクエストを処理できるようになります/sub/ . 内部の設定Web.config ファイルはすべてのサブディレクトリと同様にルートの両方で利用可能です.のは、いくつかの設定を特定し、目に見えるとしましょう/sub/ のみ、あなたは上書きすることができますWeb.config ファイルの内部sub フォルダ.簡単に説明するにはappSettings は上書きされる.
例として、私はフォルダsub そして新しいDefault.aspx そのフォルダの中のファイル.この例はwebformを使用していますが、IIS上では何でも構いません.インサイドsub フォルダ、私も新しいを配置しているWeb.config ファイル

appSettings 要素Web.config ファイルがルートにある、新しい設定を作成しますMessage :
<configuration>
  <appSettings>
    <add key="Message" value="Frontpage"/>
  </appSettings>
  ...
</configuration>
appSettings 要素Web.config ファイルはSub フォルダも同様に設定しますMessage :
<configuration>
  <appSettings>
    <add key="Message" value="Subpage"/>
  </appSettings>
</configuration>
最初のファイルがどのようにより多くの構成(3つのドットによって表される)と構成を含んでいるかに注目してくださいWeb.config ファイル名Sub フォルダには上書きの設定が入っています.
すべてが動作していることをテストするには、Default.aspx ファイル名Sub 次のマークアップを含むフォルダ
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication9.sub.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
    <h1>Hello from <%= ConfigurationManager.AppSettings["Message"] %></h1>
</body>
</html>
あなたはすでにそれを推測した.ときに/sub/ , メッセージはHello from Subpage :

ロケーション要素


ついに!これがあなたが最初にここに来た理由です.一方Web.config ファイルをフォルダーにまたがって、時にはそれだけで同じ場所にすべての設定を簡単です.The location 要素を正確に行うことができます.を指定することでlocation Webアプリケーション内の開始タグと終了タグ、「ミニ」を持っていますWeb.config 通常ファイルに含まれるファイルWeb.config . 混乱?前のシナリオを再作成しましょうWeb.config ファイル
<configuration>
  <appSettings>
    <add key="Message" value="Frontpage"/>
  </appSettings>
  <location path="Sub">
    <appSettings>
      <add key="Message" value="Subpage"/>
    </appSettings>
  </location>
  ...
</configuration>

If you are creating your own example, make sure to delete the Web.config file in the Sub folder.


インサイドlocation 要素、私は新しいappSettings 要素.実際には、可能なネストされた要素location からのものですconfiguration 要素.これは、system.webServer 要素または他の要素Web.config ファイルlocation .

アローオーバーライド


その他path 属性をlocation 要素、別の興味深い属性がありますallowOverride . この属性を使用すると、location 要素.これがどのように動作するかを示す例を作りましょう.
両方の組み合わせを使用することができますlocation 要素とWeb.config サブディレクトリのファイル.ASP .NETは常に要求しているページに最も近い構成を使用します.我々が持っているシナリオでappSettings 要求するとき、3つの異なる場所で指定される/Sub/ IISは次の順序で設定を探します.
  • インWeb.config ファイル名Sub フォルダ.
  • インlocation エレメント付きpath 設定するSubWeb.config ルートフォルダ内のファイル.
  • Web.config ルートフォルダ内のファイル.
  • これをテストするには、Web.config 最初の例からSub フォルダを指定して内容を置き換えます.
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="Message" value="Web.config in Sub folder"/>
      </appSettings>
    </configuration>
    
    アプリケーションを実行すると、新しいメッセージが表示されます.

    設定をロックするにはWeb.config ファイルをルートディレクトリに追加allowOverride="false" :
    <configuration>
      <appSettings>
        <add key="Message" value="Frontpage"/>
      </appSettings>
      <location path="Sub" allowOverride="false">
        <appSettings>
          <add key="Message" value="Subpage"/>
        </appSettings>
      </location>
      ...
    </configuration>
    
    プロジェクトを起動すると、例外が発生しますWeb.config ファイル名Sub フォルダは、それが許されない設定を上書きしようとしています

    ワイルドカードと正規表現


    私は質問の後に質問を見ました、ワイルドカードの使用を要求して、正規表現と類似していますpath 属性location 要素.特定の命名パターンを持つすべてのサブディレクトリのようなものをターゲットにすることができるようにします.
    <location path="languages/*">
    
    あなたにそれを壊すものであることを残念に思います.それは不可能です.The path 属性には、既存のファイルまたはディレクトリへの絶対パスが必要です.

    あなたのユーザーは、より少しの誤りを評価しますか?


    エルマ.IOは簡単なエラーログとアップタイム監視サービスです.ネットすべてのサポートを使用してエラーのコントロールを取り戻す.NET Webおよびログフレームワーク.
    ➡️ Error Monitoring for .NET Web Applications ⬅️
    この記事はエルマに初めて現れた.ioのブログhttps://blog.elmah.io/web-config-location-element-demystified/