當Express URL可能通過ASP.NET URL路由處理碰巧與我的ASP.NET項目中的物理文件夾相對應時,IIS Express正在生成403.14 Forbidden
錯誤。 (這個文件夾只包含代碼,而巧合的是文件夾名稱恰好與頁面的URL匹配;我的URL結構是由數據庫動態確定的,用戶可以編輯該結構,儘管我可以重命名我的項目文件夾,通常我不能阻止這種衝突的發生。)物理文件夾斷開IIS Express上的ASP.NET URL路由
這似乎正在發生,因爲DirectoryListingModule
步驟來處理請求,然後由於禁用目錄瀏覽而立即失敗。我試着刪除此:
<system.webServer>
<handlers>
<remove name="StaticFile" />
<add name="StaticFile" path="*" verb="*"
modules="StaticFileModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
,消除默認StaticFile
處理程序配置,其中有modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"
,並與僅僅提供我想要的功能配置來替換它。 (我想要靜態文件服務,但是我不需要此應用程序中的目錄列表或默認文檔。)但是,效果似乎是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.
。 (錯誤頁上的詳細錯誤信息表示我們處於IIS Web Core
模塊中,在MapRequestHandler
通知期間,處理程序爲Not yet determined
,並且存在錯誤代碼0x80070002
,這是一個COM HRESULT,對應於Win32 ERROR_FILE_NOT_FOUND
錯誤。 )
令人困惑的是,它甚至不會問問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在對這些問題的資源的方式肯定是越來越)
我嘗試添加這是我<system.WebServer>
內,以防問題是,IIS已經決定,對應物理文件夾的請求不符合managedHandler
前提:
<modules runAllManagedModulesForAllRequests="true">
但這似乎沒有幫助 - 它仍然沒有獲得對應於物理文件夾的URL的ASP.NET路由。在任何情況下,這都不是最理想的 - 我寧願不讓託管處理程序運行我確實想要作爲靜態內容處理的內容。我實際上希望將ASP.NET URL路由用作反向支持 - 我只希望它能在URL無法引用靜態內容時發揮作用。
我不明白爲什麼ASP.NET甚至沒有問ASP.NET它在這種情況下認爲。爲什麼在MapRequestHandler
階段,如果有一個碰巧與URL對應的物理文件夾,它不會調用到ASP.NET中?