21

IISでASP.NETMVC3ベータ版アプリケーションを実行しています。私のweb.config中で、フォーム認証を担当する次のセクションを定義しました。

<authentication mode="Forms">
    <forms 
        loginUrl="~/Account/LogOn" 
        name=".VNK" 
        protection="All" 
        timeout="43200" 
        cookieless="UseCookies" />
</authentication>

定義されたログインアドレスは~/Account/LogOnです。

以下を使用してログインURLを取得しようとすると、

FormsAuthentication.Initialize();
string loginUrl = FormsAuthentication.LoginUrl; 

私は受け取ります:/VNK/site/Account/Login

で定義されているアドレスとは異なるアドレスを取得するのはなぜweb.configですか?

更新:「/ VNK /site/」プレフィックスはここでは問題ではありません。問題は、クラスLoginUrlのプロパティがFormsAuthenticationweb.configの値を反映していないことです。これは、web.configの属性の値をloginUrl「〜/ Account / LogOn」から「〜/ foobar」などに変更しFormsAuthentication.LoginUrlても、「/ VNK / site / Account/Login」の値が残っていることを意味します。なんで ?

4

8 に答える 8

27

ASP.NET MVC 3 Beta にバグがあると思います。この問題は、ASP.NET MVC の以前のリリースでは発生しません。

誰かがこのエラーを再生したい場合は、次の手順に従う必要があります。

1.mvc framevork をダウンロードします

2 .新しいASP.NET MVC 3 Web アプリケーションを作成する

3 . のアクションにAuthorize属性を適用するAboutHomeController

[Authorize]
public ActionResult About()
{
   return View();
}  

4.アプリケーションを起動し、 AboutタブをクリックしてAboutアクションを呼び出します。アプリケーションが次のような URL にリダイレクトしようとしているため、サーバー エラーが発生します。

http://localhost:[ポート番号]/Account/Login?ReturnUrl=%2fHome%2fAbout

明らかにログインビューはありません。ログオンビューがあります。Url to LogOn アクションはそのままの web.config で定義されています。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

しかし、アプリケーションはそれを反映していません。何が起こっているのか誰にも手がかりがありますか?

アップデート:

私は正しかった、 MVC 3 Betaにはバグがあります。既知の問題から:

「フォーム認証が、Web.config で使用されるフォーム認証設定を無視して、認証されていないユーザーを常に /Account/Login にリダイレクトするという既知の問題があります。回避策は、次のアプリ設定を追加することです。」

<add key="autoFormsAuthentication" value="false" />

更新 2:

Alexander Prokofyev は、 ASP.NET 3 RTMが別の設定を探すことに気付きました。したがって、代わりに次の行が必要です。

<add key="loginUrl" value="~/LogOn" />

于 2010-11-04T15:22:15.800 に答える
1

したがって、簡単な解決策は、Web プロジェクトの Bin フォルダーからWebMatrix.*.dllを削除することでした。ログインをmvcスタイルのURLにリダイレクトしていたため、asp.netプロジェクトでこれを行いました。

于 2013-01-23T15:50:38.390 に答える
1

IIS にアクセスできる場合は、新しいアプリケーションを追加し、アプリケーション プール セクションで ASP.NET の「統合パイプライン」をダブルクリックして有効にします。

ホスティング プロバイダーから IIS へのアクセスが許可されていない場合は、コントロール パネルにログインします。

  • Web サイトに移動し、管理タブで ASP.NET 統合パイプ ライニングを有効にします。
  • アプリケーションを仮想ディレクトリとして設定します (私にとってはうまくいきました)
于 2012-01-31T03:34:49.467 に答える
0

以下を appSettings に入れます。

<add key="loginUrl" value="~/Account/LogOn" />

フォーム認証構成から loginUrl を空にすることができます。

于 2014-10-13T22:15:54.467 に答える
0

web.config から以下を削除しました

<remove name="FormsAuthentication" />

そして、すべてがうまくいくように見えました。このテキストは、プロジェクトを作成したときにデフォルトで追加されていました。

于 2016-03-18T15:06:49.973 に答える
-1

この場合、サーバーは〜の意味を判断するのに問題があると思います。/Account/LogOnなどのより直接的なURLをログインページに指定してみてください。

たぶんあなたはここで何か役に立つものを見つけるでしょうhttp://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

于 2010-11-03T14:16:14.520 に答える
-1

..チルダ (~) は「私の Web サイトのルート」を意味するので、Web サイトの構造を使い続けたり\、ステップアップしたりダウンしたりする必要はありません。ただし、IIS の観点から見ると、Web アプリケーションには、プログラムで要求したときに反映されるディレクトリ構造の追加レイヤーがある場合がありLoginUrlます。LoginUrl を取得する理由がわかりません。通常の状態では、IIS は、ユーザーが認証されていないページにアクセスしようとするたびに、ユーザーを自動的に LoginUrl にリダイレクトします。

于 2010-11-03T13:10:11.417 に答える