ASP.NETでのHTTPリファラーの取得


103

ASP.NetC#)でブラウザーのHTTPリファラーを取得するための迅速、簡単、かつ信頼性の高い方法を探しています。HTTPリファラー自体が信頼できないことはわかっていますが、リファラー存在する場合は、信頼できる方法でそれを取得する必要あります。



回答:


166

現在のリクエストのUrlReferrerプロパティを使用できます。

Request.UrlReferrer

これは、クライアント(ユーザーエージェント)によって提供される場合とされない場合がある要求から、Referer HTTPヘッダーを読み取ります。


8
リファラーHTTPヘッダーの形式が正しくない場合、このプロパティはSystem.UriFormatExceptionをスローすることに注意してください。
NightOwl888 2014

1
@Darin Dimitrov WEB APIを使用してREST APIを作成しようとしています。UrlReferrerはRequestオブジェクトの一部ではありません。「使用中」などを追加する必要があります。何が欠けていますか?DLL?
Ravi

1
違いはスペルが正しいことに注意してください。httpヘッダーのスペルが間違っています。MSはプロパティ名に正しいスペルを使用します。残念ながら、この2つは一致しないため、テスト時に一部の人(私)を混乱させる可能性があります。
John

8
Request.UrlReferrerサーバー側ポストバック後に使用する場合は注意してください。もちろん、Request.UrlReferrer今はあなたがポストバックしているページの値を持っています。ほとんどの場合、人々は前のページを必要とします。この場合、ページが最初に読み込まれるときに、前のページをビューステート変数などに保存していることを確認してください。そして、この変数にアクセスすると、元のページに戻ります。たとえば、あなたが行うことができ、asp.netフォームのページロードイベント:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
JonH

4
...そしてあなたは、インスタンスのためにポストバック時に、あなたができる:Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
JonH

20

Request.UrlReferrerプロパティを使用します。

シーンの下では、ServerVariables("HTTP_REFERER")プロパティをチェックしています。


2
ですから、私が使用しても何も変わらないでしょう:HttpContext.Current.Request.ServerVariables ["HTTP_REFERER"]?
Chuck Le Butt、

2
理論的には違いはありません。実際には、リフレクターのクイックルックがUrlReferrer単純な呼び出しよりもはるかに多くのことを示しているため、確実とは言えませんServerVariables("HTTP_REFERER")
Diadistis

13
文字列ServerVariables["HTTP_REFERER"]返すのに対し、URIを返すことはわかります。Request.UrlReferrer
Chuck Le Butt、

19
Request.Headers["Referer"]

説明

Request.UrlRefererプロパティがスローされますSystem.UriFormatExceptionリファラHTTPヘッダーの形式が正しくない場合(それはあなたのコントロール下で、通常ではありませんので、これが起こることができます)。

Request.ServerVariablesMSDNごとのの使用について:

Request.ServerVariablesコレクション

ServerVariablesコレクションは、事前に定義された環境変数とリクエストヘッダー情報の値を取得します。

Request.Headersプロパティ

HTTPヘッダーのコレクションを取得します。

Request.Headersすべての環境変数とヘッダーが含まれているRequest.ServerVariablesので、Request.ServerVariablesはより良い選択です。ここRequest.Headersで、はヘッダーのみを含む非常に短いリストです。

したがって、最善の解決策は、Request.Headersコレクションを使用して値を直接読み取ることです。ただし、値をフォームに表示する場合は、HTMLエンコードに関するMicrosoftの警告に注意してください。


2
RefererヘッダーのスペルはHTTP_REFERRERサーバー変数とは異なることに注意してください。
Rudey 2017

13

このように:HttpRequest.UrlReferrerプロパティ

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();

2
nullを防ぐには、次のようにします。string actual = "" + Request.UrlReferrer ?? "(デフォルト)"; //(デフォルト)空の文字列
Sheepy

10

私は.Net Core 2 mvcを使用していますが、これは私のために機能します(プレビューページを取得するため)。

HttpContext.Request.Headers["Referer"];

9

グーグルが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();

2
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();

1
これはApiController用です。それが私が必要としていたことです。
Csaba Toth

2

いつかあなたはこのようなすべてのリンクを与える必要があります

System.Web.HttpContext.Current.Request.UrlReferrer.ToString();

(「現在」が設立されていない場合のオプション)


0

他の返信に属して、nullを取得するための条件句を追加しました。

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.