1

私たちは Ajax アプリケーションを開発しており、jQuery アドレス プラグインを利用してアプリケーションのさまざまなページをロードしています。したがって、サイトの URL は次のようになります。このような URL に移動すると、アプリケーションのデフォルト ルートが読み込まれ、jQuery アドレスを使用して SomeController/SomeAction URL がページの div に読み込まれます。

問題は、ユーザーがブラウザに URL を入力して直接 www.app.com/SomeController/SomeAction (ハッシュ記号なし) にアクセスできることです。ユーザーがページに直接アクセスできないようにし、ページが Ajax リクエストを介して読み込まれることを確認するためにハッシュ サインインが必要になるのを防ぐにはどうすればよいでしょうか?

4

3 に答える 3

1

次のように、デフォルトルートの前に追加するルートを作成します。

routes.MapRoute(
    "404 non-hashed",
    "{*fullPath}",
    new { controller = "Error", action = "Show404" },
    new { fullPath = @"^(?!#).+" }
);

このルートは、ハッシュ文字で始まらないすべての要求を処理します。ハッシュ文字で始まるリクエストはルート制約に失敗し、デフォルトルートに進みます。

コントローラーとアクションを作成して404ページ、またはカスタムエラーページを表示すると、設定が完了します。

于 2011-10-28T16:00:20.423 に答える
1

request.isajaxrequest() をチェックするフィルターを作成できます。デフォルトルートを除いて、そうでないリクエストは拒否します。

それが最善の方法かどうかはわかりませんが。

于 2011-10-28T15:09:58.633 に答える
0

正当なクライアントまたはアプリが特定のリソースを要求する方法を制限しようとするルーティング トリックを行うことはできますが、(フィドラーまたは別のツールを使用して) 偽造から身を守ることはできません。カウンセラーベンによって提案されたアプローチは、潜在的にユーザーの混乱を回避し、アプリの「API」領域を制限するためにのみ役立ちます. もちろん、SEO などで問題が発生するため、 # ディープ リンクのみに依存するアプリを実際に使用するべきではありません。しかし、それは別の議論です。

フィルターではなく別のアプローチとして、アクション メソッドに以下を追加できます。

if (this.HttpContext.Request.IsAjaxRequest() != true)
            return RedirectToAction("Index");

ここでアンカーに空またはダミーの href プロパティを与え、クリックイベントで AJAX コールバックを実行させる標準的な方法は? そうすれば、ユーザーがハイパーリンクをコピーすると、正しい URL が自動的に与えられます。

于 2011-11-01T02:34:06.613 に答える