これには困惑しました。Microsoft の MVC 実装のバグかもしれないと思います。VS2008 SP1 を使用して MVC Web サイトを構築しています。ウェブサイトをロックダウンするために、コントローラーを次のように編集しました。
1 public class IdeaController : Controller
2 {
3 [Authorize(Users = "whozmom")]
4 public ActionResult Index(string zapp, int? page)
ASP.NET メンバーシップとフォーム認証を使用しています。コードをホストに公開すると、Windows 認証ダイアログ ボックスが表示されます。これを引き起こすためにどのような編集を行ったのかを理解しようと、頭を悩ませてきました。私はこれを理解しようとしてアプリケーションをほぼ完全に書き直し、Global.asax.cs ファイルの 1 つの変更に絞り込みました。最初に、バグのあるバージョン (の関連部分) をお見せしましょう。
1 routes.MapRoute(
2 "Ideas",
3 "{zapp}/{page}/",
4 new { controller = "Idea", action = "Index", zapp = "Office", page = "" }
5 );
6
7 routes.MapRoute(
8 "Default", // Route name
9 "{controller}/{action}/{id}", // URL with parameters
10 new { controller = "Idea", action = "Index", id = "" } // Parameter defaults
11 );
このルートを使用してコードをローカルで実行すると、ブラウザが空白になります...ログオンページが表示されません。ホストでアプリケーションを実行すると、Windows 認証ダイアログ ボックスが表示されます。代わりにルーティングを次のように変更すると:
1 routes.MapRoute(
2 "Ideas",
3 "Ideas/{zapp}/{page}/",
4 new { controller = "Idea", action = "Index", zapp = "Office", page = "" }
5 );
6
7 routes.MapRoute(
8 "Default", // Route name
9 "{controller}/{action}/{id}", // URL with parameters
10 new { controller = "Idea", action = "Index", id = "" } // Parameter defaults
11 );
すべて正常に動作します。3 行目の編集で、URL 文字列の前に「Ideas/」を追加していることに注目してください。誰かが私にこれを説明できますか?コントローラーから Authorize 行 (上記の行 #3) を削除することで問題を解決することもできますが、もちろんセキュリティが失われます。
更新:ここに私の完全なメンバーシップセクションがあります:
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider,
System.Web,
Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ApplicationServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
applicationName="/" />
</providers>
</membership>