2009-08-20 9 views
0

내 웹 사이트에서 언어를 변경하고 싶습니다. Handler를 사용하여 처리 할 수 ​​있다고 생각 했으므로 드롭 다운은 http://domain.com/Handler.ashx?language=en-US, f.i로 이동합니다.ASHX 처리기에서 Thread.CurrentThread.CurrentCulture 변경

그래서,이 코드가 그 핸들러를 호출

string selectedLanguage = context.Request.QueryString["language"]; 

    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); 

    context.Response.ContentType = "text/plain"; 
    context.Response.Write("Hello World"); 

    context.Response.Redirect(context.Request.UrlReferrer.AbsoluteUri.ToString()); 

을하지만 다시 갈 때, Thread.CurrentThread.CurrentCulture는 초기 값이었다 PT-BR,로 설정되어 있습니다.

제 질문은 : 처리기의 스레드가 콘텐츠를로드하는 aspx 페이지와 다른가요? 그리고 해결 방법으로 무엇을 제안 하시겠습니까?

는 브라우저가 다음 서버에 다른 요청을()는 HTTP 다시 사용자의 브라우저에 재 전송 당신에게

답변

1

Response.Redirect를 감사드립니다. 그 결과 IIS는 완전히 새로운 요청을 처리하므로이 요청을 처리 할 수있는 새 스레드가 만들어집니다.

Server.Transfer로 전환하면 Server.Transfer가 HTTP 리디렉션을 사용하지 않고 단순히 ASP.NET을 통해 보낼 수있는 요청을 생성하므로 사용자가 생각한대로 Server.Transfer로 전환하면 처리기를 권장하지 않지만 파이프 라인, 모두 같은 초기 요청의 컨텍스트 내에서.

희망 하시다면,

+0

고맙습니다. 내가 원하는대로 효과가 있었다. 호기심에서 벗어났습니다.이 경우에는 무엇을 권하고 싶습니까? ty again –

+0

글쎄, 지역화 및 문화 정보는 세션 수준에서 처리하려고 시도해야합니다. 이 핸들러 접근법을 사용하면이 핸들러를 통해 실행되는 모든 요청에 ​​대한 문제가 해결되지만 불필요한 부담과 코드 혼동이 발생합니다. 세션에 저장된 값을 OnInit이 스레드 문화권을 설정하고 사용자가 드롭 다운 메뉴에서 항목을 선택하면 해당 값을 변경한다는 사실 (또는 마스터 페이지에서) 페이지에 배치 할 때와 같이 간단한 서버 컨트롤을 구현하면 전체 세션에서 문제를 해결했습니다. 이해할 수없는 경우가 있습니다 ... – LorenVS

+0

오케이. 이 솔루션은 작동합니다. 하지만 링크를 클릭 할 때마다 단순히 문화를 '재시작'합니다. 원래 답변에 언급 한 것과 같은 이유 일 것입니다. 세션 레벨 시도를하려고합니다. –