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

时间:2014-11-12 17:47:43

标签: asp.net iis static-content

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

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

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

似乎没有任何地方配置。我怀疑,但我真的不清楚什么是静态内容以及asp.net处理的内容的规则究竟是什么?

1 个答案:

答案 0 :(得分: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类之间的关系,它确定静态文件与动态文件。

修改

还有另一组标签,在此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也是如此。我没有这方面的经验,但他们处理路径的方式可能有点不同。