2011-08-12 4 views
0

페이지 요청에 대해 일부 코드를 한 번 실행하려고하므로이 코드를 Global.asax의 Application_PreRequestHandlerExecute 메서드에 넣으십시오. 문제는 각 페이지 요청마다이 메소드가 10 번 이상 호출되는 것입니다. 그래서 질문은 요청 당 한 번만 호출되도록 코드를 얻는 방법입니다. 나는 Application_PreRequestExecute 방법이 추가 시도 : 어떤 이유로 확인을위한 즉 항상 false입니다 불구하고페이지 요청 당 한 번 코드를 호출하는 방법

const string key = "scanning_forms"; 
object chack = HttpContext.Current.Items[key]; 
if (chack == null) 
{ 
    // Code I want to execute only once 
} 

문제입니다! 어떤 아이디어? 우연히, 나는 Sitecore를 사용하고있다. 나는 그것이 중요해야한다고 생각하지 않는다.

감사합니다,

Sachin

당신은 세션 변수를 설정하고있는 경우 확인할 수 있습니다
+2

페이지의 모든 이미지에 대해서도 호출되고 있습니까? –

+0

HttpContext.Current.Items에 쓰고있는 코드를 실제로 표시하지 않았습니다. 너는 문제가 아닌가? – David

+0

아니, 그게 문제가 아니야. if 문에서 첫 번째 문은 httpContext에 대한 쓰기입니다. – Sachin

답변

1

그러나

if (Session["RequestMade"] == null) { 
    //Do logic 
    Session["RequestMade"] = true; 
} 

; 나는 당신이이 일을 시작해야한다고 확신하지 못합니다. 달성하고자하는 것에 관해 더 자세한 정보를 제공해 주시겠습니까?

0

각 요청에 대해 해당 이벤트가 시작됩니다. 즉, 페이지에있을 수있는 WebResource.axd 리소스에 대해 실행됩니다.

한 번만 호출되도록하려면 HttpContext.Current.Items.Add (키, 무언가)와 같은 작업을하고 있습니까?

+0

예 add 메소드를 사용하고 있습니다. – Sachin

0

아마도 코드를 Application_BeginRequest으로 옮기고 싶을 것입니다. 요청 당 1 회 발생합니다. 수명주기의 초기 단계입니다. http://www.techrepublic.com/article/working-with-the-aspnet-globalasax-file/5771721을 참조하십시오.

의도가 실제로 페이지 당 한 번 (요청을 생성하는 이미지와 같은 별도의 페이지가 아닌) 인 경우 요청 헤더를 검사하여 요청한 내용을 확인하여 해당 페이지로 좁힐 수 있습니다.

1

키트의 솔루션이 제대로 작동하는지 확신 할 수 없습니다 (리소스/페이지/등의 요청은 별도라고 가정합니다).

요청이 페이지에 대한 것인지 여부를 현재 방법으로 확인해야합니다 (즉, 요청이 * .aspx 파일인지 확인하거나 요청이 처리되는지 확인하십시오). PageHandler)에 의해

편집 :

내가 좋아하는 수표를 생각

이 전에 시간 코드가 실행)에 의해 채워 된 핸들러 속성을 가정 (작동해야 코드를 실행하기 :

if(HttpContext.Current.Handler is Page) 
1

HttpRequest 파이프 수정하기 Sitecore에 대한 Web.Config의 행. 간단한 해결책은 자신의 파이프 라인 프로세서를 추가하는 것입니다. 그러나이 접근법에 대한 성능 고려 사항이있을 수 있습니다. 또 다른 고려 사항은 Sitecore 항목의 레이아웃 세부 정보에서 하위 레이아웃 또는 웹 컨트롤을 사용하는 것입니다.

0

내 자신의 개발에서 눈치 챘을 한 가지는 내장 디버거를 사용하여 Visual Studio에서 ASP.NET 코드를 실행하면 global.asax 파일 메서드가 이미지 및 CSS 파일과 기타 비보안 파일에도 호출된다는 것입니다. 서버 측 파일 유형 그러나 코드를 서버에 배포 할 때 IIS는이 작업을 수행하지 않습니다 (일반적인 설정에서). 프로덕션 환경에서이 문제가 발생합니까? 아니면 로컬 컴퓨터에서?

모든 이미지 및 기타 리소스에 대해 메소드가 호출되고 문제가 지속되는 것으로 판단되면 if 블록에 코드를 래핑하여 ASP에 있는지 확인할 수 있습니다 계속하기 전에 .NET 페이지. 다음과 같은 것 :

내가 잘못 입력 했으므로 이것을 입력했습니다. 또한 C:\INETPUB\WWWROOT\MYSITE\Resources for .aspx files\images\banner.gif과 같은 파일이 있으면 위양성으로 이어질 수 있습니다. 따라서 수표를 더욱 강력하게 만들고 싶을 것입니다. 나는 너에게 맡길거야.

4

야, 이것은 다소 간단한 문제를 해결하기에 지나치게 복잡한 해결책 인 것처럼 보입니다. 이 #sitecore에 태그를 추가 했으므로 Sitecore 솔루션 컨텍스트에서이 솔루션이 필요하다고 가정합니다.

솔루션에 배치 파일 (장치 당)이 하나만 있어야합니다. 각 페이지 요청마다 실행됩니다. 예를 들어, Page_Load()에 코드를 입력하십시오.

레이아웃이 여러 개인 경우에도 공통 기본 클래스 (예 : 레이아웃)를 만들고 각 레이아웃 코드 파일을 상속받을 수 있습니다. 그리고 위와 같이하십시오.

+0

+1 간단하고 요점까지, 젠체하는! –

관련 문제