2013-07-12 6 views
8

IIS URL은 ASP.NET URL 라우팅을 통해 처리되는 URL이 ASP.NET 프로젝트의 실제 폴더와 일치 할 경우 403.14 Forbidden 오류를 생성합니다. (폴더에는 코드 만 포함되어 있으며 폴더 이름은 페이지의 URL과 일치하며, URL 구조는 데이터베이스에 의해 동적으로 결정되고 사용자는 해당 구조를 편집 할 수 있기 때문에 프로젝트 폴더의 이름을 바꿀 수는 있지만, 일반적으로 이런 종류의 충돌을 방지 할 수는 없습니다.)실제 폴더가 IIS Express에서 ASP.NET URL 라우팅을 중단 함

DirectoryListingModule은 요청을 처리하기 위해 단계를 밟은 다음 디렉토리 탐색이 비활성화되어 있기 때문에 즉시 실패합니다. 나는이 제거 시도했다 :

modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"을 가지고 기본 StaticFile 핸들러 구성을 제거하고, 내가 원하는 단지 기능을 제공하는 구성으로 대체
<system.webServer> 
    <handlers> 
    <remove name="StaticFile" /> 
    <add name="StaticFile" path="*" verb="*" 
     modules="StaticFileModule" resourceType="Either" requireAccess="Read" /> 
    </handlers> 
</system.webServer> 

. (정적 파일 제공을 원하지만 디렉토리 목록이나이 응용 프로그램의 기본 문서가 필요하지 않습니다.) 그러나 효과는 IIS가 완전히 비어있는 (0 바이트) 응답을 생성하는 것으로 보입니다 (200 상태 사용). 문제의 페이지.

그래서 다음에, 내가 사용할 수 있도록하려는 경우에만 특정 물리적 폴더를 처리 할 수 ​​StaticFile 핸들러를 구성 시도 :

<system.webServer> 
    <handlers> 
    <remove name="StaticFile" /> 
    <add name="StaticFileCss" path="style/*.css" verb="*" 
     modules="StaticFileModule" resourceType="Either" requireAccess="Read" /> 
    <add name="StaticFileScripts" path="Scripts/*" verb="*" 
     modules="StaticFileModule" resourceType="Either" requireAccess="Read" /> 
    </handlers> 
</system.webServer> 

을하지만 잘못된 URL을 쳤을 때,이 다음에하는 404.4 - Not found 오류가 발생합니다 메시지는 The resource you are looking for does not have a handler associated with it.입니다. (오류 페이지의 자세한 오류 정보에 따르면 모듈에 있고 MapRequestHandler 알림 중에 처리기는 Not yet determined이고 오류 코드는 0x80070002입니다.이 코드는 Win32 ERROR_FILE_NOT_FOUND 오류에 해당하는 COM HRESULT입니다.)

신비로운 점은 ASP.NET에 처리기가 있는지 여부를 묻는 데 별 문제가 없다는 것입니다. IIS는 그 자체로 처리기가 아님을 분명히 결정하는 것 같습니다.

URL과 일치하는 폴더가있는 경우에만 발생합니다. 동적으로 결정된 URL을 가진 다른 모든 리소스는 잘 작동합니다. - IIS는 ASP.NET에 처리기를 요청하고, ASP.NET의 라우팅 메커니즘은 정상적으로 실행되며 URL이 동적으로 정의 된 페이지 중 하나에 해당하면 모두 정상적으로 작동합니다. 이 모든 작업을 중지시키는 것은 물리적 폴더의 존재에 불과합니다.

IIS 형식의 오류 페이지 중 하나를이 404에 입력했기 때문에 IIS에서이 작업을 볼 수 있으며 ASP.NET에서 생성 된 404와는 매우 다른 고유 한 디자인이 있습니다. (실제 폴더 나 동적 리소스에 해당하지 않는 URL로 이동하려고하면 ASP.NET에서 404 페이지가 생성되므로 일반적으로 IIS는 ASP.NET에 요청을 확실히 전달하지만 IIS .

<modules runAllManagedModulesForAllRequests="true"> 
: 확실히이 문제가 리소스에 대한 방법으로 점점)

나는 문제가 IIS 물리적 폴더에 해당하는 요청이 managedHandler 전제 조건을 충족하지 않는 것으로 결정했다되었다 경우, 내 <system.WebServer> 안에이 추가 시도

하지만 도움이되지 않는 것 같습니다. 실제 폴더에 해당하는 URL에 대해서는 ASP.NET 라우팅과 관련이 없습니다. 어쨌든, 그것은 차선책 일 것입니다. 정적 콘텐트로 확실히 처리하고 싶은 콘텐트를 관리하는 핸들러를 사용하지 않기를 바랍니다. 효과적으로 ASP.NET URL 라우팅을 백스톱으로 사용하기를 원합니다. URL이 정적 콘텐츠를 확실히 참조하지 않는 경우에만 재생되기를 원합니다.

왜 ASP.NET이 ASP.NET에이 시나리오에서 생각하는지 묻지 않는 이유를 모르겠습니다. URL에 대응하는 실제 폴더가있는 경우 MapRequestHandler 단계에서 ASP.NET을 호출하지 않는 이유는 무엇입니까?

답변

3

라우트와 동일한 URL을 가진 실제 파일 또는 폴더가 발견되면 라우트가 요청을 처리하지 않고 실제 파일이 제공됩니다. 당신 Althrough

사실RouteCollection 개체에서 RouteExistingFiles에게 속성을 설정하여이 동작을 변경할 수 있습니다.

MSDN 페이지를 살펴보십시오 Scenarios when routing is not applied