我搜索高的低,但仍无法找到一个确切的答案。

我如何配置IIS 7.0或IIS Web应用程序,使ASP.NET运行时将处理的所有的请求 - 包括那些像*.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来做到这一点。

有帮助吗?

解决方案

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

如果你要离开你的Classic Mode应用程序池,那么你需要使用你会在IIS 6使用相同的方法对各种静态扩展明确创建处理程序。

根据注释其他信息:我想你的缺少的部分是建立一个HttpHandler来处理其它分机(的.js,的CSS等)。如果没有这一点,那么ASP.NET将使用默认处理这些类型的文件。你会在你的web.config创建给大家一个参考的处理程序。 本文是创建一个HttpHandler静态文件的一个例子。

其他提示

奖励给大家,但问题是在完全不同的空间中。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top