2012-07-20 111 views
2

試圖找出獲取用戶來自MVC3的網頁的最佳方式。MVC3,請求來自哪裏

我正在構建一個下載文件函數,如果用戶沒有鏈接到我自己的網站上的文件,我想將它們重定向到我選擇的頁面。

我基本上想阻止人們直接鏈接到我的文件,而無需先通過我的網站。

我該如何以最可靠的方式做到這一點?

+1

是否要用戶在登錄後才能訪問文件? – VJAI 2012-07-20 09:22:32

+0

不,用戶永遠不會登錄。我只想確保他們從我的網站上的鏈接獲得文件。如果鏈接到文件的鏈接來自鏈接到我的文件的外部網站,我想將它們重定向到另一個頁面。 – JensB 2012-07-20 11:04:41

回答

3

超級簡單的方法(將工作最的時間),將在你的控制器中看看Request.UrlReferrer。這應該包含訪問者來自的URL。

1

MVC3仍以ASP.NET爲基礎。所以,你可以使用所有的ASP.NET過的功能...

另一種方法是使用IIS的擴展=>https://www.iis.net/community/default.aspx?tabid=34&g=6&i=1288(微軟LeechGuard)

+0

謝謝,生病了。然而,如果可能的話,我會不涉及任何外部依賴。 – JensB 2012-07-20 11:06:50

+0

您也可以查看發貨的AccountController - LogOn方法使用Url.IsLocalUrl() – kapsi 2012-07-23 09:23:10

0

這就是我現在已經解決的問題。 如果文件的請求進入頁面顯示有關文件的信息。要下載文件,用戶單擊指向同一頁面的鏈接。

當代碼檢測到用戶正在從文件自己的URL請求文件時,該文件將被提供給用戶。

private bool RequestIsCommingFromSamePage() 
    { 
     if (Request.UrlReferrer == null) 
      return false; 

     string requestURL = Request.UrlReferrer.ToString(); 
     string pageURL = Request.ServerVariables["HTTP_HOST"] + Request.RawUrl; 

     requestURL = requestURL.Replace("http://", "").Replace("https://", ""); 

     if (requestURL == pageURL || pageURL == null || requestURL == null) 
      return true; 

     return false; 
    }