MVC アーキテクチャでは、デフォルトで、各アクションをステートレスに呼び出し/再生できることに注意してください。つまり、整形式のリクエストは適切なアクションにヒットし、適切AuthorizeAttribute
なアクションが識別された後にのみ他の属性が評価されます。 . 実際、これは MVC の機能ではなく、一般的な Web アーキテクチャの機能です。
ファイルのアップロードは、リクエストの一部として送信されるという点で、他のPOST
ed 値と同様です。ここで、非同期 (ajax) ファイル アップロード コントロールを使用できますが、この場合でも、ファイル アップロードは単なる別の単純な要求です。
MVC は、クライアントが大きなリクエストを送るか、小さなリクエストを送るか、または任意のリクエストを送るかを選択することはできません。MVC は、クライアントが行うことを選択した要求にのみ応答できます。
間違いなく、あなたの行動の[Authorize]
前にあるべきです。POST
ただし、ユーザーがファイルのアップロードに時間を費やして で拒否されるのをPOST
防ぐには、ユーザーが認証されていないときにそのような要求を簡単に行うのを思いとどまらせたり、防止したりするために、UI で何かを行う必要があります。
つまり、クライアントがサーバーと連携して動作し、ユーザーにアップロードを促すかどうかを判断するようにプログラムする必要があります。
簡単にできることの 1 つは、 をチェックして、User.Identity.IsAuthenticated
true の場合にフォームを表示することです。
@if (User.Identity.IsAuthenticated)
{
// display form razor
}
else
{
// display login razor
}
JavaScript を使用して送信をインターセプトすることもできます。これはより深い実装ですが、基本的には次のようになります。
- 送信時に、ユーザーが認証されているかどうかを確認します (オンザフライでサーバー側の呼び出しを行うか、必要に応じてこれを判断するためにクライアントに頼ることができます)。
- 認証されていない場合は、提出を防ぎ、代わりにログインモーダルを表示します
お役に立てれば。