Ian*_*ths 8 asp.net iis asp.net-routing
403.14 Forbidden当通过ASP.NET URL路由处理的URL恰好对应于ASP.NET项目中的物理文件夹时,IIS Express会产生错误.(该文件夹仅包含代码,并且巧合的是文件夹名称恰好与页面的URL匹配;我的URL结构由数据库动态确定,用户可以编辑该结构,所以尽管我可以重命名我的项目文件夹,一般来说,我无法阻止这种碰撞发生.)
这似乎正在发生,因为DirectoryListingModule处理请求的步骤,然后迅速失败,因为目录浏览被禁用.我试过删除这个:
<system.webServer>
<handlers>
<remove name="StaticFile" />
<add name="StaticFile" path="*" verb="*"
modules="StaticFileModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
这将删除默认的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>
Run Code Online (Sandbox Code Playgroud)
但是当我点击有问题的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,它是与HR32 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肯定会妨碍这些有问题的资源.)
我尝试在我的内部添加这个<system.WebServer>,以防问题是IIS已经确定对应于物理文件夹的请求不符合managedHandler前提条件:
<modules runAllManagedModulesForAllRequests="true">
Run Code Online (Sandbox Code Playgroud)
但这似乎没有帮助 - 它仍然没有涉及与物理文件夹对应的URL的ASP.NET路由.在任何情况下,它都是次优的 - 我宁愿不为我绝对想要作为静态内容处理的内容运行托管处理程序.我实际上希望ASP.NET URL路由可以用作一个支持 - 如果URL绝对不引用静态内容,我只希望它发挥作用.
我不明白为什么ASP.NET甚至不问ASP.NET在这种情况下它的想法.MapRequestHandler如果有一个物理文件夹恰好与URL对应,为什么在这个阶段没有调用ASP.NET ?
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |