「C# AdventCalender jp:2010 も最終日」で公開した 「id:waritohutsu:20101225:1293276322 」だが、あまりに長くなってしまったので記事を二分割にした。
前回までの対応で、サイト全体に対する認証処理は実現できた。しかし、サイトの一部に対する認証をかけたいニーズも多いと思う。そこで今回は「Views/Home/About.cshtml」に対してのみ認証が必要なアプリに修正する。
Web.Configの修正
前回のASP.NET MVC3 RC2アプリ作成時に、Web.Configの設定は自動的に「サイトのどの場所にアクセスするにも認証が必要」という設定になっている。当該箇所を以下に修正する。
-
- Web.Config(抜粋)
<system.web> <!-- 無効化 ←はてなでうまく表示されなかったので、「<」を全角にした <authorization> <deny users="?" /> </authorization> --> <!-- 新規に追加--> <authorization> <allow users="*" /> </authorization>
上記の修正で、サイトアクセスに対する認証が不要となる。
「Views/Home/About.cshtml」ビューに対する認証処理の追加
次に、「Views/Home/About.cshtml」ビューに対する認証処理を追加するため、「Controller/HomeController.cs」に以下の修正を実施する。
-
- HomeContorller.cs
public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; return View(); } //AboutメソッドにAuthorize属性を追加 [Authorize] public ActionResult About() { return View(); } }
ASP.NET MVCではAuthorizeAttributeを利用して認証を実現することができる*1ので、「Views/Home/About.cshtml」ビューに対応した「HomeController.About()」メソッドに対する修正が必要となる。
コンテンツの修正(ホントは不要)
また、せっかくのクリスマス記事である。以下の様にコンテンツを修正してネタを仕込む等する。
-
- 「Views/Home/About.cshtml」
@{ ViewBag.Title = "今日は楽しいクリスマス…、過ぎる…!?!!"; } <h2>About</h2> <p> 嫁と楽しいクリスマス!サイコー!!! <img src="../../Content/yome.jpg" alt="クリスマスは嫁と一緒" width="700" /> </p>
-
- 「Views/Shared/_Layout.cshtml」(抜粋)
<div id="menucontainer"> <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("嫁とラブラブは簡単に見せられないよ!", "About", "Home")</li> </ul> </div>
アプリケーションの実行
Visual StudioからF5を押してアプリケーションを実行して欲しい。認証が行われずに以下の画面が立ち上がるはずだ。
次に、当該画面から「嫁とラブラブは簡単に見せられないよ!」リンクを押下すると認証が求められるはずだ。無事認証を実施すると、以下のような画面が表示されるはずだ。
以上で、C# Advent Calendar 2010は完了だ!メリークリスマス!!!!!
*1:必死でWeb.Configをいじってえらいハマってしまった…orz