web-dev-qa-db-ja.com

ASP.NetのURLでアンカーリンクを取得する

私はそのようなURLを持っています:

http:// localhost/place/663828/bangkok-paradise-restaurant-toronto#r30604

コードビハインドでコードロジックを実行する値を取得するとともに、アンカータグが存在するかどうかを確認しようとしています。

Page.Requestを使おうとしていますが、どのプロパティにもURLのアンカーリンク部分が表示されていません。

例えば:

Response.Write(this.Page.Request.RawUrl.ToString());

このページの組み合わせ/プロパティをほとんど試しました: http://www.west-wind.com/weblog/posts/269.aspx

このトピックを完成させるためだけに:

Stackoverflowのアプローチをパーマリンクでコピーしました...:D

21
TimLeung

ASP.NETのサーバー側から#anchorを取得することはできません

これは、ページ内の特定の場所に移動するようにブラウザに指示するクライアント側のフラグです。

本文のonLoadイベントでJavascriptを使用してアンカーを確認し、ajaxを使用してサーバーに送り返すことができます。

var anchorValue;
var url = document.location;
var strippedUrl = url.toString().split("#");
if(strippedUrl.Length > 1)
anchorvalue = strippedUrl[1];

参照: http://www.wacdesigns.com/2008/01/16/retrieveing-anchor-value-from-url/

24
Eoin Campbell

より明確に言うと、アンカータグはどのブラウザからもHTTPリクエストの一部として送信されることはなく、ブラウザ内でローカルにのみ解釈されます。 ASP.NETも、Microsoftやその他のWebサーバーテクノロジも、その要求に対するアンカーを認識しません。

RFC 1808
セクション2.4.1-「フラグメント識別子はURLの一部とは見なされないことに注意してください。」

他の人が示唆しているように、あなたが得ることができる最も近いものは、クライアント側を使用してブラウザウィンドウの場所を読み取ることです。

14
stephbu

フラグメントは、次の方法でC#のURLから解析できます。

var uri = new Uri("http://localhost?id=2#token=23");
var fragment = uri.Fragment; // will return #token=23

ただし、browserがフラグメントをサーバーに送信しないという問題があります。この情報をリクエストに含むサービスからリクエストを受信すると、サーバー側からも利用できるようになります。

7
Eugeniu Torica