我搜索了高低,仍然找不到明确的答案。
如何配置 IIS 7.0 或 IIS 中的 Web 应用程序,以便 ASP.NET 运行时能够处理all请求——包括对静态文件的请求,例如*.js
, *.gif
, etc?
我想做的事情如下。
我们有一种 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;
}
基本思想如下:我们有一个branding
我们的 web 应用程序中的文件夹,其中又包含每个“品牌”的文件夹,其中“品牌”等于主机名。也就是说,要求http://foo.example.com/
应该使用静态文件branding/foo_example_com
, 然而http://bar.example.com/
应该使用来自的内容branding/bar_example_com
.
现在我想要IIS做的就是将所有对静态文件的请求转发到StaticFileHandler
,然后它将使用整个“基础设施”并提供正确的文件。但是,尽我所能,我无法配置 IIS 来执行此操作。
如果应用程序池的Managed Pipeline Mode
被设定为Integrated
这是默认值。在集成模式下,ASP.NET 处理所有请求,包括静态对象的请求。
如果您必须将应用程序池留在Classic Mode
那么您需要使用在 IIS 6 中使用的相同技术来显式地为各种静态扩展创建处理程序。
基于评论的附加信息:我认为你缺失的部分是创造一个HttpHandler
处理其他扩展名(.js、.css 等)。如果没有这个,ASP.NET 将使用默认处理这些类型的文件。您将在 web.config 中创建对处理程序的引用。本文 http://www.wrox.com/WileyCDA/Section/id-291916.html是为静态文件创建 HttpHandler 的示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)