ASP.Net(C# )でブラウザーのHTTPリファラーを取得するための迅速で簡単で信頼性の高い方法を探しています。HTTPリファラー自体の信頼性が低いことは知っていますが、リファラーが存在する場合は、信頼性の高い方法でリファラーを取得したいと考えています。
10 に答える
現在のリクエストのUrlReferrerプロパティを使用できます。
Request.UrlReferrer
これにより、クライアント(ユーザーエージェント)によって提供される場合とされない場合があるリクエストからリファラーHTTPヘッダーが読み取られます。
Request.Headers["Referer"]
説明
リファラーHTTPヘッダーの形式が正しくない場合、Request.UrlReferer
プロパティはaをスローします(これは通常、ユーザーの制御下にないために発生する可能性があります)。System.UriFormatException
したがって、プロパティは100%信頼できるわけではなく、クラスRequest.UrlReferer
に解析できないデータが含まれている可能性があります。Uri
値が常に読み取り可能であることを確認するには、Request.Headers["Referrer"]
代わりにを使用してください。
ここで他の人が提案しているように使用Request.ServerVariables
することに関しては、MSDNごとに:
Request.ServerVariablesコレクション
ServerVariablesコレクションは、事前定義された環境変数の値を取得し、ヘッダー情報を要求します。
Request.Headersプロパティ
HTTPヘッダーのコレクションを取得します。
Request.Headers
は、すべての環境変数とヘッダーが含まれているRequest.ServerVariables
ため、よりも適切な選択です。ここで、はヘッダーのみを含むはるかに短いリストです。Request.ServerVariables
Request.Headers
したがって、最も信頼できる解決策は、Request.Headers
コレクションを使用して値を直接読み取ることです。ただし、フォームに値を表示する場合は、値をHTMLエンコードすることに関するMicrosoftの警告に注意してください。
プロパティを使用しRequest.UrlReferrer
ます。
シーンの下では、ServerVariables("HTTP_REFERER")
プロパティをチェックしているだけです。
このように:HttpRequest.UrlReferrerプロパティ
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
私は.NetCore2 mvcを使用していますが、これは私のために機能します(プレビューページを取得するため):
HttpContext.Request.Headers["Referer"];
C# Web API Referrer
グーグルはここで取引を検索するときにこの投稿にあなたを連れて行くので:を含まない通常の呼ばれるものとWeb API
は異なるタイプを使用します。通常のリクエストにはこの情報が含まれていないため、本当に必要な場合は、クライアントに情報を含めるように邪魔しないようにする必要があります。これを自分の一部にすることもできますが、より良い方法はを使用することです。Request
MVC Request
HttpRequestMessage
UrlReferrer
Web API
API Object
Headers
まず、拡張してメソッドHttpRequestMessage
を提供できます。UrlReferrer()
public static string UrlReferrer(this HttpRequestMessage request)
{
return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}
次に、クライアントはをに設定する必要がありReferrer Header
ますAPI Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
そして今、Web API Request
あなたがあなたからこのようにアクセスできるリファラーデータが含まれていますWeb API
:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
いつかあなたはこのようなすべてのリンクを与える必要があります
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(「現在」が設立されていない場合のオプション)
他の返信に属し、nullを取得するための条件句を追加しました。
string ComingUrl = "";
if (Request.UrlReferrer != null)
{
ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
ComingUrl = "Direct"; // Your code
}
.NETCoreまたは.NET5を使用する場合は、次のことをお勧めします。
httpContext.Request.Headers.TryGetValue("Referer", out var refererHeader)