2010-04-07 36 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不能在預編譯的網站中使用。我很憤怒。