0

私は MVC4 に基づく Web アプリを持っており、(アクションへの投稿を介して) 乗算ファイルをサーバーに送信するフォームを持っています。

私の問題は[Authorize]、ファイルが最初にサーバーにアップロードされ、承認されていないユーザーがログインするためのメッセージを取得するように (ユーザーを登録/ログイン ページにリダイレクトする)、ポスト アクションの前にコントローラーを配置することです。

ユーザーが承認されていない場合はファイルのアップロードを防ぎたいので、最初にユーザーが承認されたユーザーであるかどうかを何らかの方法で確認してから、フォームを送信する必要があります。

どうすればそれを行うことができますか?

4

2 に答える 2

1

MVC アーキテクチャでは、デフォルトで、各アクションをステートレスに呼び出し/再生できることに注意してください。つまり、整形式のリクエストは適切なアクションにヒットし、適切AuthorizeAttributeなアクションが識別された後にのみ他の属性が評価されます。 . 実際、これは MVC の機能ではなく、一般的な Web アーキテクチャの機能です。

ファイルのアップロードは、リクエストの一部として送信されるという点で、他のPOSTed 値と同様です。ここで、非同期 (ajax) ファイル アップロード コントロールを使用できますが、この場合でも、ファイル アップロードは単なる別の単純な要求です。

MVC は、クライアントが大きなリクエストを送るか、小さなリクエストを送るか、または任意のリクエストを送るかを選択することはできません。MVC は、クライアントが行うことを選択した要求にのみ応答できます。

間違いなく、あなたの行動の[Authorize]前にあるべきです。POSTただし、ユーザーがファイルのアップロードに時間を費やして で拒否されるのをPOST防ぐには、ユーザーが認証されていないときにそのような要求を簡単に行うのを思いとどまらせたり、防止したりするために、UI で何かを行う必要があります。

つまり、クライアントがサーバーと連携して動作し、ユーザーにアップロードを促すかどうかを判断するようにプログラムする必要があります。

簡単にできることの 1 つは、 をチェックして、User.Identity.IsAuthenticatedtrue の場合にフォームを表示することです。

@if (User.Identity.IsAuthenticated)
{
    // display form razor
}
else
{
    // display login razor
}

JavaScript を使用して送信をインターセプトすることもできます。これはより深い実装ですが、基本的には次のようになります。

  1. 送信時に、ユーザーが認証されているかどうかを確認します (オンザフライでサーバー側の呼び出しを行うか、必要に応じてこれを判断するためにクライアントに頼ることができます)。
  2. 認証されていない場合は、提出を防ぎ、代わりにログインモーダルを表示します

お役に立てれば。

于 2014-07-28T05:33:18.573 に答える