2009-12-10 2 views
5

안녕하십니까.URL의 ASP.NET 공백 또는 % 20

공백이있는 존재하지 않는 URL을 처리 할 때 ASP.NET 엔진에서 이상한 동작이 발견되었습니다.

우리는 this 같은 정상적인 URL이있을 때 : https://stackoverflow.com/questions/tagged1/C 23 %

(있는 경우) 개발자가 의도 한대로 우리가 정상적인 사용자 정의 404 페이지를 얻을.

하지만 여기 버그가 있습니다. this과 같은 공백을 추가하기 만하면 https://stackoverflow.com/questions/tagged/c % 23

이 표시되며 불쾌한 ASP.NET 404 오류 페이지가 표시됩니다. 그러한 페이지가 표시되어야하는지 여부는 또 다른 이야기입니다. 나는 이미 많은 테스트를 거쳐 디버깅 연구를했으며,이 상황에서 모든 커스텀 핸들러는 무시되고 글로벌 애플리케이션 클래스 (Application_Error in global.asax)에 도달하지 못했다고 말할 수있다. 사실 이 상황을 ASP.NET에서 어떻게 처리 할 수 ​​있는지 알 수 없습니다. 어떤 아이디어?

메모와 마찬가지로이 동작은 ASP.NET 및 ASP.NET MVC와 관련이 있습니다 (StackOverflow.com 예제와 같이). 다른 사이트를 방문한 결과 Microsoft.com조차도이 범주에 속하는 것으로 나타났습니다 (this : http://www.microsoft.com/en/us%20/default.aspx 참조). 또한 % 20 시퀀스의 공백을 더 나은 결과로 대체 할 수 있습니다.

답변

2

해결 방법을 찾을 수 있습니다.

HttpException'pageName.aspx에 대한 하위 요청 실행 중 오류' 메시지로 처리됩니다.

우선 ASP.NET은 요청한 페이지 나 경로를 찾을 수 없습니다. 그런 다음 예외는 System.Web.CachedPathData.GetVirtualPathData에서 발생합니다 (실제로는 System.Web.CachedPathData.GetConfigPathData에서 발생하지만 GetVirtualPathData은 문제를 해결합니다).

그런 다음 오류 처리기가 있으면 일부 동작을 제공하고 무언가를 시도합니다. 여기서 우리는 일반적으로 사용자를 페이지 404 또는 더 일반적인 오류 페이지로 이동시키는 Server.Transfer 또는 Request.Redirect이 있습니다. 그러나. 현재 상황에서 어쨌든 HttpException이 발생하고 ASP.NET 오류 페이지가 표시됩니다. 이 상황에서 Server.ClearErrorServer.RewritePath은 도움이 될 수 있습니다. 예외가 발생하지 않습니다. 하지만! 이러한 오류 처리는 응용 프로그램에서 발생하는 일반적인 비즈니스 논리 예외를 충돌시킵니다.

새로운 문제를 해결하기 위해 HttpException을 수신하는지 여부 (ClearError와 함께 ServerRewrite를 사용함) 또는 자체 코드의 예외 여부에 따라 if/else를 사용해야합니다. 그러나 다시 말하지만, 예외 클래스를 제공하는 것이 좋습니다.

어쨌든 다른 응용 프로그램 코드가 여전히 실행되는 동안 Application_Error 처리기가 무시되는 매우 이상한 사례라고 생각합니다.

편집

코드 방법은 (우리가 예외 메시지가 비어있을 때 우리가이 오류를 가지고의 InnerException이 null 것을 추측 만 가능) 더 나은 솔루션과 같은 규칙을 ISAPI의 라이터 내에있는 최선의 선택이 아니었다으로 맞춤 404 페이지에 (\s+(\.aspx).*)|(\s+/) 여기서 우리는 /somePage .aspx/somePath /과 같은 모든 요청을 잡습니다. 공백이 .aspx 나 슬래시 앞에 없지만 페이지 이름이나 경로 부분 내에있을 때 문제를 언급하지 않았습니다.

0

요청이 asp.net 파이프 라인에 도달하지 않는다는 것만은 아닙니다. IIS에서 오류 문서를 설정하면 "불쾌한 페이지"대신 오류 메시지가 표시되지 않습니까?

+0

나는 그 방법을 시도 할 것이다. 그러나 이상한 것은 : 우리 응용 프로그램의 일부 오류 처리기가 실행되고 그 날을 저장하려고 시도하지만 Application_Error가 무시된다는 것입니다. 이 이상하지 않니? :) – terR0Q

+0

그것을 시도, 도움이되지 않습니다. 웹 사이트에 대한 모든 종류의 오류 404 오류에 대한 대상 URL을 설정하고 ASP.NET은 여전히 ​​자체 메시지를 제공합니다. 또한 web.config에서 customErrors를 사용하면 작동하지 않습니다. – terR0Q

관련 문제