ASP.NET 라우팅 - 사용자 정의 경로가 Global.asax의 모든 것을 완전히 건너뛰나요?
문제
간단한 ASP.NET 3.5 SP1 Web Forms 앱이 있습니다...System.Web.Routing DLL을 추가하고 표준 ASP.NET 페이지를 "IHttpHandler"로 반환하는 간단한 경로를 만들었습니다.
모두 좋은...단, HttpContext.Current.User는 없는 ???
그래서 조금 더 자세히 살펴봤습니다(Global.asax 파일의 모든 이벤트에 중단점을 설정했습니다).일반적으로 다음 중단점은 적중됩니다(표준 ".aspx" 페이지로 이동하는 경우).
- Application_BeginRequest
- Application_AuthenticateRequest
- Application_EndRequest
하지만 ASP.NET 라우팅을 사용하는 경우...해당 이벤트 중 어느 것도 실행되지 않습니다.뭔가 빠졌나요?
해결책
IIS6을 사용한다고 가정하면 대안은 "와일드 카드" 확장 핸들러를 정의하는 것입니다.이 간단한 "모두 포괄" 매핑을 IIS6에 추가하면 확장 없는 요청을 처리할 수 있습니다.기본적으로 .NET 설치 프로그램은 ".aspx"를 aspnet_isapi.dll에 매핑하므로 .aspx 확장명이 작동합니다.확장 없이 요청을 APS.NET 엔진에 매핑하려면 IIS에 다음을 확인하도록 지시해야 합니다. 모든 요청.
다음은 프로세스를 설명하는 빠른 문서입니다.
http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx
귀하의 URL이 "불완전한" 요소를 줄이는 데 도움이 되기를 바랍니다.:)
-토드
다른 팁
괴물과 비즈웨어 (그리고 멍청한) 대답을 발견했습니다 :)
경로 끝에 ".aspx"를 추가하지 않으면 Global.asax에서는 아무것도 발생하지 않습니다. 또는 아무것도.
그래서 "수정"은 내가 이것으로부터 내 경로를 바꾸는 것이 었습니다.
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}", new MyHandler());
이에:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}.aspx", new MyHandler());
얼마나 절름발이 :) ... 그러나 그것은 수정이 아닙니다!
당신이 말할 때
".aspx"를 경로 끝의 끝에 추가하지 않으면 Global.asax에서는 아무것도 발생하지 않습니다. 세션 스테이트 또는 무엇이든. "
IIS는 로그 파일에 그러한 요청을 기록합니까? 아니면 단지 익명입니까? 응용 프로그램 변수와 ViewState는 어떻습니까?
미안하지만 아직 테스트하지 않았지만 이미 알고 있는지 물어 보셨습니까?
응용 프로그램 변수와 ViewState를 확인 했는데이 두 가지는 분명히 작동합니다. 서버 로그에 대해서는 확실하지 않습니다 : S