2013年2月22日金曜日

ASP.NET:Form認証のログインページでjavascriptやcss(外部ファイル)が効かない

ASP.NET のフォーム認証でハマりました。

web.configに以下を記述しForm認証を設定。

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

</authentication>

そしたらログインページでjavascriptやcss、画像などの外部ファイルが効かなくなり、なんとも簡素なページが表示されてしまった。
原因はアプリケーションサイト内のすべてのコンテンツに対して認証がかかってしまったため。
ログイン認証が通れば普通に表示される。
ログインページに直接cssを書くのもありですが、画像はどうにもならない。

web.configに、認証の例外としたいフォルダを指定することで対応。
configurationタグ内に記載して下さい。

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


ついでに、認証後のReturnUrlが、直前のページではなく、一定のページで良い場合は
FormsAuthentication.RedirectFromLoginPage(USERID, False)
のかわりに
FormsAuthentication.SetAuthCookie(USERID, False)
Response.Redirect("/Top.aspx")

とします。



2013年2月20日水曜日

This page is missing a HtmlHead control which is required for the CSS stylesheet link that is being added

ASP.NET(私の場合は4.0)でCalendarExtenderを含むページを実行したらエラー。
CalendarExtenderにかぎらず、Control Toolkitで起こるのかもしれません。

'/Hoge' アプリケーションでサーバー エラーが発生しました。
--------------------------------------------------------------------------------

This page is missing a HtmlHead control which is required for the CSS stylesheet link that is being added. Please add <head runat="server" />.
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.NotSupportedException: This page is missing a HtmlHead control which is required for the CSS stylesheet link that is being added. Please add <head runat="server" />.
ソース エラー:
現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 

エラーが言っているとおり、Site.Masterや各ページの<head>を<head runat="server">と書き換えます。

2013年2月15日金曜日

Windowsのコマンドプロンプト(cmd)を管理者として実行する

Windows XPまではコマンドプロンプトを起動するとき、Win+Rで「ファイル名を指定して実行」を呼び出し、cmdと打ち込んでからEnterを押して起動していました。
慣れるとこちらのほうがアクセサリやデスクトップのショートカットをクリックするより早いんです。

が、Windows 7 になって、このコマンドプロンプトを管理者として実行したい場合がちょいちょいあります。
今まではわざわざすべてのプログラム→アクセサリ→管理者として実行、で起動してましたが、もう面倒。

ですが見つけました。ショートカットを。

Winキー押下
→検索ダイアログにcmdと入力
→Shift+Ctrl+Enterで管理者起動

UACのダイアログが出るのは致し方ありませんが・・・。
ちなみにWin+Rの「ファイル名を指定して実行」でShift+Ctrl+Enterを押してもこれは出来ないです。
ついクセでRまでつけたくなるのですが。

ConnectionStringにOLE DB を指定すると 404 ページが見つかりません

ASP.NET 4.0 IIS 7 にて開発中の出来事。
32bitのIISのローカル環境で開発し、データベース回りをOle Dbを使って実装。
providerNameはSystem.Data.OleDb、OleDbConnectionを用いてOracle11gに接続していました。
いざ本番環境と同じものにセッティングしたIISにコンテンツを乗せてアクセスしてみると
「404 ページが見つかりません」
エラーが発生。

原因はサーバが64bit版だったこと。
64bitのIISはデフォルトで32bitのアプリケーションが動かないようです。
そしてOle DBは32bitでした。(現時点で32bitまでしかサポートしていない?)
32bitのOleDBを動かすためにはIISに設定をしてやる必要があります。

 設定方法
  1. IISマネージャを起動
  2. 「アプリケーションプール」を選択
  3. 「DefaultAppPool」から「詳細設定」を選択
  4. 全般の項目にある「32ビットアプリケーションの有効化」をFalseからTrueに変更

【参考サイト】
IIS(64ビット版)でJETを使用する。
http://blogs.gine.jp/taka/archives/1417

32bit Application on 64bit IIS7
http://blogs.gine.jp/kusa/archives/131