これは私を困惑させ、MicrosoftのMVC実装のバグかもしれないと思います。 VS2008 SP1を使用してMVC Webサイトを構築しています。私のウェブサイトをロックダウンしようとして、コントローラを次のように編集しました。なぜASP.NET MVC MapRouteがWindows認証ダイアログボックスをポップアップさせるのですか?
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 /」を追加してください。誰かが私にこれを説明することはできますか?私は私のコントローラ(上記の3行目)からAuthorize行を削除して問題を解決することもできますが、もちろん私のセキュリティは失われます。
UPDATE:ここでは私の完全なメンバーシップ・セクションである:
<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>