2009-02-25 2 views
4

I가 다음 예제 페이지 구조 :Server.Execute에서 aspx 페이지가 호출되었는지 감지하는 방법은 무엇입니까?

  • Webpage.aspx
  • Script.aspx

내가 Webpage.aspx에서 Server.Execute("Script.aspx")를 호출하면 어떻게 Script.aspx에서 검색 할 수 있습니다 그것은 그 웹 브라우저에서 직접 호출되지 않고 Webpage.aspx에서 호출되었습니다.

리퍼러를 확인해 보았습니다 만 이것은 스크립트가 아닌 도메인을 반환하는 것으로 보입니다.

I 요청이 Request.IsLocal을 통해 지역의 경우 적어도 당신이 말할 수있는 .NET 3.5

답변

6

, 당신은 단순히 현재 실행 경로에 비교하여 Request.Path을 확인하실 수 있습니다 .

if (Request.CurrentExecutionFilePath == Request.Path) 
{ 
    //This has been called from a web browser 
} else { 
    //This has been executed from the file Request.Path 
} 

왜?

Server.Execute를 호출 할 때 요청 부분이 그대로 전달됩니다. 따라서 Webpage.aspx.cs에서 Server.Execute를 사용한 후 Script.aspx.cs에서 Request.Path의 값을 보면 "/Webpage.aspx"값을 갖게됩니다.

그러나 웹 브라우저가 Script.aspx에 직접 액세스하는 경우 Script.aspx.cs의 Request.Path 값은 "/Script.aspx"가됩니다. currentExecutionPath는 항상 현재 실행되는 스크립트를 산출하므로 두 값을 비교하면 원하는 결과가 제공됩니다.

희망이 도움이됩니다.

+0

감사합니다. 이것은 내가 script.aspx 외부에서 추가 작업을 할 필요가 없었기 때문에 제안 된 최선의 방법이었다 :) – GateKiller

0

에 ASP.NET 웹 양식을 사용하고 있습니다.

+0

브라우저 요청이 로컬 서버에서 발생한 경우에만 true를 반환합니다. 내 경우에는 항상 false를 반환합니다. 이 경우 – GateKiller

+0

, 나는 원래 페이지에 다시 참조가 있다고 생각하지 않습니다. 최선의 방법은 다른 사람들이 말한 것처럼 아마도이 정보를 쿼리 문자열에 전달하여 – baretta

0

(웹 페이지 .aspx에서 호출되었음을 식별하는 데 도움이되는) 쿼리 문자열 매개 변수를 Script.aspx에 전달할 수 있습니다.

Server.Execute("script.aspx?xFrom=webPage.aspx")

편집 : 나는 당신이 webpage.aspx를 실행하는 것을 알고에 대한 요청이 몇 가지 값을한다고 생각합니다.

EDIT2 : Request.Url?

12

Server.Execute는 원래 페이지와 동일한 컨텍스트로 새 페이지를 실행하므로 Request의 모든 속성은 여전히 ​​Webpage.aspx에 대한 원래 요청을 반영해야합니다 (CurrentExecutionFilePath는 "/Script.aspx"). Request.Path는 "/Webpage.aspx"를 포함해야하며, Request.Url은 도메인이나 쿼리 문자열을보아야 할 경우 전체 Uri 개체를 제공합니다.

당신은 또한 다음을 위해에 문자열 일치를 할 수 요청한 페이지의 URL을 반환합니다 Script.aspx

+0

+1에 Context.Items를 사용하는 것입니다. 이것이 바로 그 것이다. – Sam

+0

+1 샘이 준 것과 같은 이유 때문입니다. 그것처럼! :-) –

0

HttpRequest.FilePath에이를 경우 Server.Execute를 호출하기 전에 Context.Items에 값을 추가하고 읽을 수 있습니다 " Script.aspx "

는 (내 닷넷은 매우 가난하지만 소금의 거대한 곡물이 대답을보십시오.) Script.aspx.cs에서

+0

이것은 "Script.aspx"를 반환하지만 "Webpage.aspx"를 반환하려고합니다. 답변 해주셔서 감사합니다. – GateKiller

+0

보류 중 ... 대신 CGI 'SCRIPT_NAME'변수를 사용해보세요. 지금 당장 ASP를 테스트 할 ASP 상자가 없지만, PHP에서와 똑같이 작동해야합니다 (이 경우 올바른 작업을 수행함). – flussence

0

IHttpHandler 퍼니 너티가 없다고 가정하면 HttpContext.PreviousHandler이 null이 아닌지 확인할 수 있습니다. 그러나 PreviousHandler를 설정할 수있는 백만 가지 (여러 가지 이유)가 있기 때문에 Stevemegson이 Server.Execute를 호출하기 전에 HttpContext.Items를 사용하는 것이 좋습니다.

관련 문제