2010-04-07 64 views
4

我搜索了一个较低的值,仍然找不到明确的答案。通过ASP.NET运行时将IIS7配置为服务器静态内容

如何配置IIS 7.0或者IIS中,使ASP.NET运行时将处理所有请求的Web应用程序 - 包括那些静态文件,如*.js*.gif等?

我想要做的事情如下。

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

很自然地,我使用的是VirtualPathProvider,经营这样的:

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; 
} 

的基本思想是:我们有我们的web应用,又包含文件夹,每个“品牌里面branding文件夹“,”品牌“等于主机名。也就是说,http://foo.example.com/的请求应使用branding/foo_example_com的静态文件,而http://bar.example.com/应使用来自branding/bar_example_com的内容。

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

+0

你问如何强制所有请求由ASP.NET请求处理程序处理,而不是IIS的这些类型的默认处理程序?或者,如果您的IIS没有响应非ASPNET文件的请求?你的问题有点不清楚。 – SqlRyan 2010-04-07 16:02:25

+0

@rwmnau谢谢!现在更清楚了吗? – 2010-04-07 16:09:32

+0

它的确如此 - 感谢编辑。 – SqlRyan 2010-04-07 16:11:14

回答

5

如果应用程序池的Managed Pipeline Mode设置为Integrated这是默认值,则II7已经这样做。在集成模式下,ASP.NET处理包括静态对象在内的所有请求。

如果你不得不离开你的应用程序池在Classic Mode那么你需要使用在IIS 6中使用的相同技术来为各种静态扩展显式创建处理程序。

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

+0

查看我的编辑。鉴于此,你的回答是否正确? – 2010-04-07 16:09:08

1

给大家的荣誉,但问题是在完全不同的空间。

VirtualPathProvider不能在预编译的网站中使用。我很愤怒。