ASP.NET 라우팅 - 사용자 정의 경로가 Global.asax의 모든 것을 완전히 건너뛰나요?

StackOverflow https://stackoverflow.com/questions/400236

  •  03-07-2019
  •  | 
  •  

문제

간단한 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top