0

私は ajax の専門家ではないので、より良い答えを探すのは難しいと思います。残りのサービス (ユーザー セッションの検証用) の呼び出しを含む別の ".js" ファイルを作成しようとしましたが、機能しません。

私の目標は、ビューを (MVC で) ロードする前にユーザー セッションを検証することです。データベースで特定のセッションを検証するロジックを使用する唯一の方法は、ajax を使用して URL 経由でレスト サービスを呼び出すことです。

このコードは (ホーム ビュー内で) うまく機能します。

<script type="text/javascript">
    $(function () {
        $.get('@Url.Action("GetSession", "Auth")', function (getdata) {
            if (getdata.UserID && getdata.SessionID && getdata.SourceIP) {
                $.post('http://website.com/Rest/Authenticate/ValidateUserSession', JSON.stringify(getdata), function (response) {
                    if (response == false) { window.location.replace('@Url.Action("SignUp", "Auth")'); }
                });
            } else {
                window.location.replace('@Url.Action("SignUp", "Auth")');
            }
        });
    });
</script>
<h2>
    Home</h2>

    @*The content here should not appear, unless session is validated.*@

唯一の問題は、検証のプロセスに 3 ~ 5 秒かかるため、検証が成功したかどうかに関係なく、ajax 呼び出しが結果を返す前にユーザーにホームページが表示されることです。検証/応答が返さfalseれると、sigup ページにリダイレクトされます。

このプロセスのベストプラクティスが何であるかわかりません。今のところ、セッションが検証されない限り、ホーム ビューをユーザーに表示したくありません。うまく説明できれば幸いです。より良いアイデアがあれば提案してください。

追加情報:

可能であれば、私はこれをするのが好きです:

<script type="text/javascript">
    if(!validated()){
       window.location.replace('@Url.Action("SignUp", "Auth")');
    }
</script>
<h2>
    Home</h2>

    @*The content here should not appear, unless session is validated.*@
4

1 に答える 1

0
  1. サーバー側で残りのサービスを消費できないのはなぜですか? 技術的には、それができない理由はないはずです。これはまさにそれを議論するチュートリアルです: http://codebetter.com/johnvpetersen/2012/03/22/accessing-a-asp-net-webapi-rest-service-from-asp-net-mvc/

それはすべての世話をする必要があります。何らかの理由でそれができない場合は、次のことができます。

  1. ホームページを部分ビューにします。

  2. ホームページを読み込む代わりに、処理中のアイコン (または表示したいメッセージ) を含む空のページを読み込みます。

  3. REST サービスに話しかけ、応答があった場合は、JQuery を使用してホームページの部分ビューをロードします。それ以外の場合は、サインアップの部分ビューをロードします。

JQuery を使用して MVC 部分ビューをロードする方法について説明している記事は次のとおりです

于 2012-04-17T02:34:30.597 に答える