Visual Studio 2013でまったく新しいプロジェクトを作成しています。Asp.NetMVCとフレームワーク4.5.1を選択します。プロジェクトが作成されたら、F5以外はデフォルトのWebページを開始しません。残念ながら、ログインページへのリダイレクトも生成され、ログインページにもリダイレクトされます。ブラウザにあるURLの短いバージョンを次に示します。
http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525
イベントビューアにエラーはありません。しかし、画面には次のように表示されます:
「HTTPエラー404.15-見つかりません要求フィルターモジュールは、クエリ文字列が長すぎる要求を拒否するように構成されています。」
WebサイトはIIS Expressのデフォルト設定で実行されています。この問題を解決するにはどうすればよいですか?Visual Studio 2013に何か問題があると思いますか?
新しいWebサイトを作成し、IISでホストすると機能します。ただし、新しいWebサイトを(何も変更せずに)作成し、play(デフォルトでIIS Expressを開始)を押す)を押すと、それはできません。
Documents\IISExpress\config\applicationhost.configのすべてのwebsitesを削除しました。私はすべてを再コンパイルしました、そしてそれはこのエントリを作成しました:
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
それでも、IISではなくIIS Expressでエラーが発生します。
これは潜在的に有害なアドバイスであることに注意してください、applicationhost configファイルを直接変更することはめったに良い考えではありません、通常、あなたのために安全にこれを行うツールがあります(たとえば、内部からVisual Studio。)先に進む前に、IIS Expressがゴミ箱になった場合に備えて、このファイルのバックアップコピーを作成してください。
この問題を修正するために、デフォルトのIISここにある構成ファイルを使用しました:
C:\Windows\System32\inetsrv\config\applicationHost.config
私の文書へ
%userprofile%\documents\iisexpress\config\applicationhost.config
そしてそれは働いた。
これは、匿名アカウントではなく、Windows認証が設定されていたためです。
Visual Studioでプロジェクトを強調表示する
右側の[プロパティ]パネルを開きます(またはF4を押します)
「Windows認証」を「無効」に設定します
「匿名認証」を「有効」に設定します
この問題は、MVC 5テンプレートによって(デフォルトで)選択された認証モードが原因であり、正しく設定されていないと、ReturnUrlスタイルのリダイレクトが無限ループにつながる可能性があります。
OWINスタートアップ検出を無効にするには、このキーをwebconfigファイルに追加します。
<add key="owin:AutomaticAppStartup" value="false"/>
ログインアクションに_[AllowAnonymous]
_属性がありません。
_[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
// code....
}
_
2番目の可能性、IIS Expressのみに固有:同じデフォルトの_WebApplication1
_プロジェクトを複数回作成し、異なる認証設定で再生した場合、IIS Expressは、追加の認証設定を構成ファイルに保存しました。何かのようなもの:
_ <location path="WebApplication1">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
</configuration>
_
構成はユーザーのDocumentsフォルダー_Documents\IISExpress\config\
_にあり、以下を探す必要があります。
_applicationhost.config
_
次に、上記のxmlノード_<location path="WebApplication1">
_を削除します。
Visual Studio 2015以降を使用している場合は、構成ファイルの次のパスを確認してください:$(solutionDir)\.vs\config\applicationhost.config
各ソリューションには独自の設定ファイルがあります。
削除する必要がありました( ソースリンク ):
<authorization>
<deny users="?" />
</authorization>
私は遅れる可能性があることを知っていますが、これはOPの質問のためではありません。しかし、将来、誰かがここに来た場合、AllowAnonymous
およびAuthorize
属性に関するもう1つのチェックは、すべての子アクションもチェックする必要があるということです。
たとえば、パンくずリストとサイドバーの2つの子アクションを呼び出すレイアウト(ログインページでも使用)があり、AllowAnonymous
属性がありません(コントローラーにはAuthorize
属性がありました)。
この助けを願っています。
IISで、Webサイトを選択し、認証を確認します。フォーム認証を使用している場合-
ASP.Net MVC 5テンプレートは、Microsoft.Owinおよび関連ライブラリをプロジェクトに追加します。 Owinインフラストラクチャはフォーム認証を必要としないため、テンプレートはweb.configに次のキーも導入します。
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
</system.webServer>
このキーの存在は、ログインページへの望ましくないループバックの原因になる可能性があります。コメントすることで、一部の人の問題を解決できる場合があります。
私のMVCプロジェクトは.Net 4.5用に構成されていたが、IISのアプリケーションプールとして.Net 4.0を使用していたため、同じ問題に直面しました。 .Net 4.5アプリケーションプールに切り替え、問題は修正されました。これが他の人の助けになることを願っています!
私はこの問題を何時間も続けました。
私にとっては、Startup.Auth.csファイルにありました。
このコードは、コメントアウトされると、リダイレクトループを停止しました。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
TL:DR?〜/ Account/Loginなどの認証ページから保護されたWeb API(認証を必要とするWeb API)を呼び出さないそれ自体は、これを行いません。)。その場合、サーバー側で無限リダイレクトループに入ります。
犯人は間接的に_AccountController::Authorize
_であり、AccountController
が_[Authorize]
_で装飾されているという事実が見つかりました。
根本原因は、「保護されたWeb API」にアクセスしていたHomeViewModel()(home.viewmodel.jsの6行目)から呼び出されたSammy()でした。これは/ Account/Loginで行われていたため、/ Account/Loginがそれ自体にリダイレクトされていました。
これが問題の原因であることをいくつかの方法で確認できます。
AccountController::Authorize
_を_[AllowAnonymous]
_で装飾する解決策は、承認が必要なビューに対してのみアプリバンドル(別名「〜/ bundles/app」)を発行することでした。私の知る限り、/ Account /ビューは古典的なMVCベースのビューであり、アプリのdatamodel/viewmodelの一部ではありませんが、誤ってバンドルScripts.Render(@"~/bundles/app")
呼び出しを_Layout.cshtmlに移動していました(保護されたWeb API呼び出しを引き起こします)/Account /を含むすべてのMVCビューに対して作成されます。)
私の場合:私の_layout.cshtmlで、Html.Actionを使用してAuthorize ControllerからActionを呼び出します:例:Html.Action( "Count"、 "Product")-> loop error
修正:そのアクションの[AllowAnonymous]属性で飾る(またはこれらのHTMLヘルパーを_layoutから削除する)
承認属性を持つアクションがパイプラインにないことを確認してください。私の場合、レイアウトには、allowAnonymous属性が欠落していたナビゲーションメニューコントローラーがありました。
これらの答えは、多かれ少なかれ同じパズルのかけらです。すべてを1か所にまとめようとします。 OPが説明した問題は、OWINパイプラインとAspNET Identityを実装した瞬間にアプリケーションにヒットしました。
それを修正する方法を見てみましょう...
私はあなたがそれを必要とすることを推測します、もしあなたが必要としないなら、あなたは認証を必要としない、そして私はあなたを必要とすると思うそれ以外は、古いスタイルの認証を使用していますが、使用していないと思います。そのため、OWINスタートアップ属性も削除しないでください...
[Assembly: OwinStartupAttribute(typeof(YourApp.Probably_App_Start.SomethingLikeAuthConfig))]
...または構成行...
<add key="owin:AppStartup" value="YourApp.Probably_App_Start.SomethingLikeAuthConfig" />
これをクリアしました。認証が必要です。これは、各コントローラーが[Authorize]
属性を必要とするか、モノをグローバルに登録することで1か所ですべてのコントローラーに同じことを行うことができることを意味します(たとえば、RegisterGlobalFilters()
でfilter.Add(new AuthorizeAttribute())
行を追加) 。前者の場合(各コントローラーを個別に保護する場合)、この部分をスキップして、次の部分に進んでください。後者の場合、すべてのコントローラーは不正アクセスから保護されるため、その許可のエントリポイント-保護されていないLogin()
アクションが必要です。追加するだけで...
[AllowAnonymous]
...そしてあなたは良いはずです。
ユーザーがログインすると、システムの処理を簡素化するために、ブラウザーは暗号化された(できれば!)Cookieを保存します。したがって、Cookieが必要です。UseCookieAuthentication
という行を削除しないでください。
Windows Authentication
(無効)をオフにして、少なくともIIS Expressが関係する場合、Anonymous Authentication
(有効)を設定することにより、.Webサイトを開始すると、これらの設定がIIS Express設定(applicationhost.config
)]にコピーされ、次の2行が表示されます。
<windowsAuthentication enabled="false" />
<anonymousAuthentication enabled="true" />
Web.configにdeny users="?"
と書かれた認証設定があるかもしれません。これは、許可サブシステムが匿名ユーザーの入力を防ぐように指示されていることを意味します。 OWINでは、これは設計どおりに機能します。これを削除するか、匿名ユーザーが次のようなものを使用してログインページにアクセスできるようにする必要があります。
<location path="Account/Login"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
HTH
この受け入れられた答えのおかげで同じ問題を解決しました: ユーザーが役割を持たない場合のASP.NETログインリダイレクトループ 。
Loginアクションを含むコントローラーにはAuthorizeAttribute
(カスタムのものも)が付いていますが、loginアクションにはAllowAnonymous
属性が付いていません。コントローラーからAuthorizeAttribute
を削除し、ログインアクションにAllowAnonymous
を追加することが解決策になる場合があります。
ウェブサイトにローカルでコールバックするときに無限ループに陥るという同様の問題がありました。ローカルでデバッグするとき、ポートをリダイレクトしていることがわかりました。プロジェクトのプロパティ画面でポート番号を更新しましたが、Azureの定義をクラウドプロジェクトで同じままにして、すべてが期待どおりに動作し始めました。
私の場合、それは非常に有線の問題でした、私は存在しない役割でホームコントローラーを飾りました。そのため、リダイレクトループが発生します。
Asp.Net MVC 4プロジェクトでも同じ問題が発生しました。 Startup.csに移動し、ConfigureAuth(app)の行をコメントアウトして解決しました。
public void Configuration(IAppBuilder app)
{
//ConfigureAuth(app);
}
また、プロジェクトでIISでWindows認証を有効にし、他のすべての認証オプションを無効にしました。
私にとって、これは翻訳リソースファイルへの参照を含むLoginViewModelが原因であり、明らかに認証によって保護されていることが原因でした。これらの参照を削除し、問題は解決しました。
私にとっては、removing以下のブロックがそれを修正しました:
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
仮定する
<authentication mode="None" />