ASP.NET MVCアクションでリファラーURLを取得するにはどうすればよいですか?


88

ASP.NET MVCアクションでリファラーURLを取得するにはどうすればよいですか?アクションを呼び出す前に、ページにリダイレクトしようとしています。


5
すべてのユーザーエージェント(別名ブラウザ)がリファラー情報を送信するわけではなく、一部のユーザーはそれを偽造する可能性があることに注意してください。
belugabob 2009

回答:


148

辞書に直接Request.UrlReferrerアクセスしたくない場合は、を使用して参照URLを取得することもできますRequest.ServerVariables


それはまさに私が必要としているものです。ありがとう、兄弟!
DmitryBoyko 2016

Request.UrlReferrerは実際にはURIですが、そこからリファラーURLに関して必要なすべてを取得できます。(URIとURLの詳細:stackoverflow.com/questions/176264/…)。
ミゲル


8

あなたはこれを使うことができます

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

2
これはフィルターコンテキストでは機能しますが、質問で求められたアクションコンテキストでは機能しません。
Jace Rhea 2013

3

リファラーURLをviewModelに渡すことができます。私の意見では、状態を介して共有するよりも優れたアプローチです。次のようにしてみてください。

public interface IReferrer
{
    String Referrer { get; set; }
}

..。

public static MvcHtmlString HiddenForReferrer<TModel>(this HtmlHelper<TModel> htmlHelper) where TModel : IReferrer
{
    var str = htmlHelper.HiddenFor(hh => hh.Referrer);
    var referrer = HttpContext.Current.Request.UrlReferrer.AbsoluteUri;
    return new MvcHtmlString(str.ToHtmlString().Replace("value=\"\"", String.Format("value=\"{0}\"", referrer)));
}

..。

@Html.HiddenForReferrer()

1
ええと、アンダースコア自体が有効な変数名であることに気づいたことはありません。どのように '試合。
BVernon 2018

@BVernon本当の問題は、なぜ誰もがそれをそのように使用するのかということです。名前に単一のアンダースコアを付けて私が知っている唯一の規則は、それが不要または不要な変数の単なるプレースホルダーであることを示すことです。
ダニエル

@Daniel同意し、修正済み
Andrey Burykin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.