通过ASP.NET运行时将IIS7配置为服务器静态内容

时间:2010-04-07 15:56:23

标签: asp.net iis-7 integrated-pipeline-mode static-files

我搜索了一个低,仍然找不到一个明确的答案。

如何在IIS中配置IIS 7.0或Web应用程序,以便ASP.NET运行时将处理所有请求 - 包括*.js,{{1}等静态文件的请求等等?

我要做的是如下。

我们有一种SaaSy网站,我们可以为每个客户“品牌化”。 “品牌”意味着开发自定义母版页并使用一堆*.gif和其他图像。

很自然地,我正在使用*.css,其运作方式如下:

VirtualPathProvider

基本思路如下:我们的webapp中有一个public override System.Web.Hosting.VirtualFile GetFile(string virtualPath) { if(PhysicalFileExists(virtualPath)) { var virtualFile = base.GetFile(virtualPath); return virtualFile; } if(VirtualFileExists(virtualPath)) { var brandedVirtualPath = GetBrandedVirtualPath(virtualPath); var absolutePath = HttpContext.Current.Server.MapPath(brandedVirtualPath); Trace.WriteLine(string.Format("Serving '{0}' from '{1}'", brandedVirtualPath, absolutePath), "BrandingAwareVirtualPathProvider"); var virtualFile = new VirtualFile(brandedVirtualPath, absolutePath); return virtualFile; } return null; } 文件夹,其中包含每个“品牌”的文件夹,其中“品牌”等于主机名。也就是说,branding的请求应使用http://foo.example.com/中的静态文件,而branding/foo_example_com应使用http://bar.example.com/中的内容。

现在我想要IIS做的是将所有请求转发到静态文件到branding/bar_example_com,然后使用整个“基础架构”并提供正确的文件。但是,尽我所能,我无法配置IIS来执行此操作。

2 个答案:

答案 0 :(得分:5)

如果应用程序池的Managed Pipeline Mode设置为Integrated(默认值),那么

II7已经这样做了。在集成模式下,ASP.NET处理所有请求,包括静态对象的请求。

如果必须将应用程序池保留在Classic Mode中,则需要使用在IIS 6中使用的相同技术来显式创建各种静态扩展的处理程序。

基于评论的其他信息:我认为您缺少的部分是创建HttpHandler来处理其他扩展名(.js,.css等)。如果没有这个,那么ASP.NET将使用这些类型文件的默认处理。您将在web.config中创建对处理程序的引用。 This article是为静态文件创建HttpHandler的示例。

答案 1 :(得分:1)

感谢所有人,但问题在于完全不同的空间。

VirtualPathProvider不能用于预编译的网站。我很生气。