2012-07-20 3 views
2

사용자가 MVC3에서 오는 웹 페이지를 가져 오는 가장 좋은 방법을 찾으려고합니다.MVC3에서 오는 요청은 어디입니까

나는 다운로드 파일 기능을 만들고 있는데, 사용자가 내 웹 사이트에서 파일에 링크되어 있지 않으면, 내가 선택한 페이지로 리디렉션하고 싶습니다.

기본적으로 사람들은 내 웹 사이트를 먼저 통과하지 않고도 내 파일에 직접 링크하지 못하도록하고 싶습니다.

어떻게하면 가장 신뢰할 수있는 방법으로이 작업을 수행 할 수 있습니까?

+1

사용자가 로그인 한 후에 만 ​​파일에 액세스하게 하시겠습니까? – VJAI

+0

아니요, 사용자는 절대로 로그인하지 않습니다. 나는 그들이 내 웹 사이트의 링크를 통해 파일에 접근하고 있는지 확인하고자합니다. 파일에 대한 링크가 내 파일에 연결되어있는 외부 웹 사이트에서 오는 경우 다른 페이지로 리디렉션하고 싶습니다. – JensB

답변

3

슈퍼 간단한 방법 (즉, 대부분의 작업을 할를 사용하는 것입니다 ... 너무 ASP.NET의 모든 기능을 사용할 수 있습니다 컨트롤러의 Request.UrlReferrer을 살펴 보는 것이 좋습니다. 여기에는 방문자가 방문한 URL이 포함되어야합니다.

1

MVC3은 여전히 ​​ASP.NET을 기반으로합니다. 그래서 당신은

또 다른 방법은 IIS-확장 =>https://www.iis.net/community/default.aspx?tabid=34&g=6&i=1288 (Microsoft에서 LeechGuard)

+0

고마워, 아프다. 그러나 가능한 경우 외부 종속성을 포함하지는 않습니다. – JensB

+0

또한 출하 된 AccountController를 살펴볼 수 있습니다. LogOn 메소드는 Url.IsLocalUrl ()을 사용하고 있습니다. – kapsi

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; 
    } 
관련 문제