ASP.Net(C#)でブラウザーのHTTPリファラーを取得するための迅速、簡単、かつ信頼性の高い方法を探しています。HTTPリファラー自体が信頼できないことはわかっていますが、リファラーが存在する場合は、信頼できる方法でそれを取得する必要があります。
ASP.Net(C#)でブラウザーのHTTPリファラーを取得するための迅速、簡単、かつ信頼性の高い方法を探しています。HTTPリファラー自体が信頼できないことはわかっていますが、リファラーが存在する場合は、信頼できる方法でそれを取得する必要があります。
回答:
現在のリクエストのUrlReferrerプロパティを使用できます。
Request.UrlReferrer
これは、クライアント(ユーザーエージェント)によって提供される場合とされない場合がある要求から、Referer HTTPヘッダーを読み取ります。
Request.UrlReferrerサーバー側ポストバック後に使用する場合は注意してください。もちろん、Request.UrlReferrer今はあなたがポストバックしているページの値を持っています。ほとんどの場合、人々は前のページを必要とします。この場合、ページが最初に読み込まれるときに、前のページをビューステート変数などに保存していることを確認してください。そして、この変数にアクセスすると、元のページに戻ります。たとえば、あなたが行うことができ、asp.netフォームのページロードイベント:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
Request.UrlReferrerプロパティを使用します。
シーンの下では、ServerVariables("HTTP_REFERER")プロパティをチェックしています。
UrlReferrer単純な呼び出しよりもはるかに多くのことを示しているため、確実とは言えませんServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]返すのに対し、URIを返すことはわかります。Request.UrlReferrer
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の警告に注意してください。
RefererヘッダーのスペルはHTTP_REFERRERサーバー変数とは異なることに注意してください。
このように:HttpRequest.UrlReferrerプロパティ
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
グーグルが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();