2013年3月22日金曜日

ASP.NET customErrors defaultRedirectに設定したエラーページに遷移しない

これもまたハマりました。
ASP.NETの簡易エラーページを表示させようと、Web.configに以下を設定しました。

<configuration>
  <system.web>
    <customErrors mode="On" defaultRedirect="Error.html" />
  <system.web>
<configuration>

この状態でログインページを表示し、DBの接続文字列を不正なものにして接続エラーを出してみたんですが、指定したリダイレクトページが出ませんでした。あと挙動がとてもおかしいいです。

1. ログインする
2. セッションエラーが出てまたログインを迫られる
3. またログインする
4. ASP.NETデフォルトのエラーページが表示される

???
Error.htmlはどこいった?

ずっと原因が判らずハマってたのですが、原因がForm認証にありました。
現在Web.configではこんなようなForm認証を設定しています。

 <authentication mode="Forms">
  <forms loginUrl="~/Login.aspx" name=".ASPXFORMSAUTH" timeout="2880" defaultUrl="~/Top.aspx"/>
 </authentication>

(略)

Form認証は、認証前はどのページにアクセスしてもデフォルトページに戻す仕様です。
defaultRedirectで設定したエラーページも例外ではありません。
ということでログインのときに接続エラー→エラーページにリダイレクト→Form認証エラでログインページに戻される→またログイン→エラーページにリダイレクト・・・と
そこでループが発生していたのでした。
回避するためにcommonフォルダを除外するなどのエントリも以前書きました。
すぐ思い出せなかったのが悔しい・・・。
そういうわけですので、エラーページをフォーム認証の例外ページにするようWeb.configで設定することでリダイレクトページが正常に機能するようになりました。
こんな感じです。

 <location path="Error.html">
  <system.web>
   <authorization>
    <allow users="*"/>
   </authorization>
  </system.web>
 </location>


※<system.web>の前に入れて下さい。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。