首页 文章

为什么内容,脚本作为静态和其他目录不作为?

提问于
浏览
1

所以这是一个asp.net我感觉太多人不理解 . 也就是说,我不理解它,我已经问过一群人/ googled,其他人似乎也不知道具体细节 .

默认情况下,ASP.Net应用程序将作为静态内容提供Content和Scripts目录中的文件 . 事实上,如果我创建其他目录,我认为它也会在这些目录中提供静态内容 .

但是,某些目录的内容不会被提供 - 例如典型的Asp.Net Mvc控制器目录 . 此外,您始终可以在asp.net(或OWIN处理程序)中配置路由,这些路由将获取某些路由,但不能 .

似乎没有任何地方配置任何东西 . 我怀疑,但我真的不清楚什么是静态内容和asp.net处理的内容的规则到底是什么?

1 回答

  • 1

    我总觉得这个图有用:http://www.4guysfromrolla.com/images/step2.gif

    具体来说,该图中提到的HttpHandler对应于.NET Web项目根目录中Web.Config文件的这一部分:

    <system.webServer>
        <handlers>
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
    

    该标记的 path 属性可用于仅配置由某个类处理的某些目录 . 此时,IIS将使用适当的上下文和线程等将HTTP请求移交给相应的类 . 我的猜测是,如果您运行具有多个框架的IIS,则每个框架都有一个与其add-handler标记关联的不同路径 .

    此外,IIS有自己的默认设置,用于将哪些文件扩展名映射到哪些处理程序类 . 这些也可以在IIS管理界面中进行修改,因此您的超级有用的操作团队可能会为您添加,即使您的web.config中缺少它 . 但是,在一天结束时,它是确定静态文件与动态的url-HttpHandler类之间的关系 .

    Edit:

    还有另一组标签,在此ServerFault答案中概述:

    https://serverfault.com/questions/175499/serving-cs-csproj-files-on-iis7-5

    它描述了一个 <add fileExtension=".cs" allowed="false" /> 标签,它对文件扩展名进行操作,而不是整个路径上的模式 . 这是不允许以 .cs 结尾的文件和 .csproj 的服务 . 此外,由于您正在安装IISExpress,因此您应该知道它使用的是与标准machine.config不同的配置文件 . 该答案描述了该文件的路径:

    Where is the IIS Express configuration / metabase file found?

    所有这一切都被自我托管的概念弄得一团糟,也就是没有IIS . 我相信Nancy可以做到这一点,而ServiceStack也是如此 . 我没有这方面的经验,但他们处理路径的方式可能有点不同 .

相关问题