2017-05-01 16 views
-1

数日前、私は私の小さなプロジェクトを作成します。このプロジェクトは私の個人的なブログです。彼はASP.NET WebAPI(バックエンド)、角度(フロントエンド)に基づいています。ブログ投稿の件数を表示します。 ASP.NET WebAPI 2

私のPostエンティティには、ViewCountフィールドがあります。

投稿数を計算するにはどうすればよいですか?そして、再起動(F5)時には、カウンタは増加しません。

既成のコードや実装のヒントはありますか?

返信いただいた皆様に感謝します。

+0

コード – FrostyFire

+0

のために吸血鬼ではありません申し訳ありませんが、このタスクについて2日以上考えてください。多分、あなたはこの仕事をする方法を知っていますか? –

答えて

0

あなたの質問が広すぎるので、あなた自身で何かを作成する必要がありますが、一般的には、ヒットするたびにあなたの行動のPostエンティティを更新する必要があります。たとえば:

post.ViewCount++; 
db.Entry(post).State = EntityState.Modified; 
db.SaveChanges(); 

はしかし、考慮すべき事柄がいくつかあります:

  1. あなたは並行性の問題(すなわち、ビュー数を更新しようとする複数の同時リクエストを計画する必要があります同時に)。これを行うには、保存するときにDbUpdateConcurrencyExceptionをキャッチして返信する必要があります。

    try 
    { 
        db.SaveChanges(); 
    } 
    catch (DbUpdateConcurrencyException) 
    { 
        // handle it 
    } 
    

    並行処理の方法については、さまざまな方法があります。 Microsoft details your options。ただし、一度だけ処理するだけでは、次回の保存で並行処理の例外が発生する可能性があります。私はPollyのようなものを採用することをお勧めします。これは、数回または永遠に再試行するなど、より強力な例外処理能力を提供します。

  2. 重複要求を除外する必要があります(たとえば、F5リフレッシュから)。これを行うには、ユーザーのセッションにアクセス時間などの何かを設定し、最後にページにアクセスしてから一定の時間が経過している場合にのみビューをカウントするか、セッションには存在しません(最初のビュー)。しかし、これでセッションタイムアウトを覚えておいてください。たとえば、1時間ごとにユーザーのビューのみをカウントしたいが、20分後にセッションがタイムアウトする場合、それは機能しません。このシナリオでは、データベーステーブルのように、アクセス時間をより永続的な場所に保存することをお勧めします。セッションを使用する場合は、In ProcまたはState Serverではなく、セッション状態にSQL ServerまたはRedisバッキングを使用する必要があります。これは、前者が後者よりもはるかに信頼性が高いためです。

  3. あなたはボットを考慮する必要があります。これは、ページの任意の自動化された表示、良性または悪意のある可能性があります。少なくとも、GoogleBotのようなスパイダーを考慮する必要があるため、サイトがインデックスに登録されるたびにビューカウントを増やさないようにします。しかし、リクエストがボットから発生したかどうかを判断しようとすると、それ自体がすべてです。ボットのUA文字列のデータベース全体は、野生のものを追跡しようとするために明示的に管理されます。少なくとも大部分の自動トラフィックを除外することは可能ですが、ビュー数は基本的にボットをフィルタリングするほど正確です。あなたが実際にビューを自分でカウントを追跡する必要が本当に正当な理由がない限り、すべてのことに基づいて

、私はそれについて心配しないでくださいと言うと思います。たとえば、使用状況の統計情報をGoogleアナリティクスのようなものを使って内部的に報告しようとする場合は、はるかに簡単で管理しやすいソリューションになります。アプリケーションのビュー数が必要な場合でも、サードパーティの分析ソフトウェアをローカルにインストールする方が良い場合があります。 APIを使用したソリューションや、プログラムからデータを取得するための方法を探してから、ビューの数を単純に引き出すことができます。

関連する問題