FC2ブログ

記事一覧

一意のキー属性 'value' が 'default.aspx'に設定されている種類 'add' の重複コレクション エントリを追加できません - Web.config の設定- | asp.net


今回は asp.net の Web.config でデフォルトぺージ (defaultDocument) や Url Rewrite / Redirect または HTTP ヘッダーの変更設定を記述すると発生する以下のエラーについてその対処方法を覚え書きしたいと思います。


aspnet_duplicate_keyvalue_01.png



前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.エラーの内容

エラーの内容は以下の通りですが、エラーページでもなく Http ステータスコード500で返ることから、意味が分かりにくくなっています。

デフォルトページを記述した場合
一意のキー属性 'value' が 'default.aspx'に設定されている種類 'add' の重複コレクション エントリを追加できません

Url Rewrite / Redirect を記述した場合
一意のキー属性 'name' が 'RedirectRule'に設定されている種類 'rule' の重複コレクション エントリを追加できません

HTTP ヘッダーを記述した場合
一意のキー属性 'name' が 'X-Content-Type-Options'に設定されている種類 'add' の重複コレクション エントリを追加できません



2.Web.config の設定 (誤り)

Web.config では例えば以下のように実装します。
この実装方法は間違っています。

Web.config
<configuration>
<system.webServer>
<!--HTTPヘッダーを設定する-->
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff"/>
<add name="X-Frame-Options" value="DENY" />
<add name="X-XSS-Protection" value="1" />
</customHeaders>
</httpProtocol>
<!--デフォルトぺージを設定する-->
<defaultDocument>
<files>
<add value="default.aspx" />
</files>
</defaultDocument>
<!--URL Rewrite / Redirect を設定する-->
<rewrite>
<rules>
<rule name="RedirectRootRule" stopProcessing="false">
<match url="^default\.aspx$"/>
<action type="Redirect" url="./" redirectType="Permanent"/>
</rule>
<rule name="RedirectSubFolderRule" stopProcessing="false">
<match url="^(.*\/)*default\.aspx$"/>
<action type="Redirect" url="{R:1}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>


上記の Web.config をIIS上に配置して、IISの管理画面から既定のドキュメントを開くと、以下のようなエラー画面が表示されます。

aspnet_duplicate_keyvalue_02.png


または、IIS上のサイトにアプリケーションを追加してサブディレクトリにWeb.configを追加したり、VS 上でプロジェクトのプロパティでプロジェクトのURLに仮想ディレクトリを追加することにより、トップディレクトリのキー属性と重複することからエラーが表示されます。

aspnet_duplicate_keyvalue_04.png




3.IIS での設定

IIS ではデフォルトで Default.aspx ページがサーバー自体に設定されています。そして、全てのサイトにその設定が引き継がれています。

aspnet_duplicate_keyvalue_03.png



4.正しい設定方法

エラーを解消するには、以下の2通りの方法があります。
(1)IIS の既定のドキュメントから、該当のページ名を削除します。
(2)Web.config で clear を入れることにより継承を防ぎ、重複した設定をしないようにします。(またはRemove value により特定の値のみ削除することでも実現が可能です。)

Web.config
<configuration>
<system.webServer>
<!--HTTPヘッダーを設定する-->
<httpProtocol>
<customHeaders>
<clear />
<add name="X-Content-Type-Options" value="nosniff"/>
<add name="X-Frame-Options" value="DENY" />
<add name="X-XSS-Protection" value="1" />
</customHeaders>
</httpProtocol>
<!--デフォルトぺージを設定する-->
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
</files>
</defaultDocument>
<!--URL Rewrite / Redirect を設定する-->
<rewrite>
<rules>
<clear />
<rule name="RedirectRootRule" stopProcessing="false">
<match url="^default\.aspx$"/>
<action type="Redirect" url="./" redirectType="Permanent"/>
</rule>
<rule name="RedirectSubFolderRule" stopProcessing="false">
<match url="^(.*\/)*default\.aspx$"/>
<action type="Redirect" url="{R:1}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>






最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。




関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。