2017-05-29 23 views
0

UrlReferrerは私が何をしたいのかFirfoxはHttpContext.Current.Request.UrlReferrerヌルASP.NET MVC

で常にnullで常にあることは今後の要求

のURLを取得することですので、私は合格すると思いました道

レイザービュー

@{ 
    string url = HttpContext.Current.Request.UrlReferrer.ToString(); 
    HttpContext.Current.Response.Headers.Add("CustomeUrl", url); 
} 

とhearderを取得し、レスポンスヘッダにコントローラにカミソリビューからのURLコントローラ

コントローラ

public string SaveUploadedFile(HttpPostedFileBase fileBase) 
{ 
    string url = HttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString(); 
} 

残念ながら上記のコードは動作しませんでしたではそのようにのような値HttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString();がnull

あるので、私はビューからコントローラへのURLを渡すために助けてください

+0

[Request.UrlReferrer null?]の可能な複製(https://stackoverflow.com/questions/149130/request-urlreferrer-null) – hardkoded

答えて

0

このような問題はありませんが、コントローラでRequest.UrlReferrerを使用するだけです。

nullの場合、他の原因が考えられます。

また、UrlReferrerはブラウザによって送信されるため、レスポンスに追加するのは無意味です。

1

コントローラ内でHttpContext.Current.Request.Headers.Keys["CustomeUrl"].ToString()が常にヌルである理由は、ビュー内でHttpContext.Current.Responseにヘッダーを追加し、コントローラー内のHttpContext.Current.Requestから読み取るためです。この場合も、ビューとコントローラの両方がサーバー上で実行され、同じRequest/Responseモデルを共有するので、それを書き込むのと同じ場所から読み取る必要があります。

これは、ViewとControllerの両方が同じRequest/Responseデータにアクセスできるためです。 HTTPコンテキストに既に存在する値をコントローラに渡す必要はありません。すでに値があるためです。また、URLが不正である場合(通常は直接制御できないため)、UrlReferrerプロパティは例外をスローします。したがって、use the Request.Headers collection to retrieve itする必要があります。したがって、この行はコントローラとビューで同じように動作します。

string referrer = HttpContext.Request.Headers["Referer"]; 

側注:が(それ抽象化する方法はありませんので、それがあればHttpContextBaseに利用できるものと異なる可能性があるので、あなたはMVCでレガシー静的HttpContext.Currentアクセサを使用しないでくださいそれを変更するカスタムコンポーネントまたはサードパーティのコンポーネントを使用しています)。

HTTPリファラーは、MVCアプリケーションのURLに移動するブラウザのハイパーリンクがクリックされている場合のみnullではありません。

ページAでホスト

http://example.com/page-a.html

<html> 
<head></head> 
<body> 
    <a href="http://example2.com/page-b">click me</a> 
</body> 

ページB(MVC)でホスト

http://example2.com/page-b

var referrer = HttpContext.Request.Headers["Referer"]; 
// referrer value is http://example.com/page-a.html if the above 
// hyperlink is clicked on page-a.html. If the user types the 
// new URL in the browser instead of clicking the hyperlink, 
// HTTP referer will usually be null, depending on the browser implementation. 

注: HTTPリファラーは、クライアントとクライアントとサーバー間に存在するファイアウォールに完全に依存します。いくつかのファイアウォールはヘッダーを取り除くことができるので、アプリケーションは機能するためにアプリケーションに頼るべきではありません(または、ヘッダーが利用できない場合には少なくとも代替計画があります)。この情報は、通常、追跡/デバッグの目的でのみ使用する必要があります。