1

我正在使用 NuGet 包(我直接从 GitHub 自己编译)用 N2 构建一个网站。/N2 文件夹中构成管理界面的文件都被编译成 N2.zip,并且有一个虚拟路径提供程序配置为从 zip 文件中提供 /N2 文件夹中的任何内容。

在我的开发机器上,它运行良好。当我将它部署到 Web 服务器(运行 IIS 6 或 IIS 7.5)时,对 /N2 文件夹中的文件的请求返回 404。有一个奇怪的例外:提供带有查询字符串值的请求。例如,/N2/Login.aspx?ReturnUrl=%2fn2有效,但/N2/Resources/Css/All.css无效。(我正在使用 Fiddler 2 来监控请求。)

这是一个 MVC 站点,在 .Net 4.0 下运行,未预编译。

我在 web.config 中打开了 ASP.Net 跟踪,从中我可以看到 VPP 正在执行,因为它写入的跟踪行以ZipVPP:

ZipVPP: False ~/default.cshtml      
ZipVPP: False ~/default.vbhtml  4.79004203405183E-05    0.000048
ZipVPP: False ~/index.cshtml    9.07992130999052E-05    0.000043
ZipVPP: False ~/index.vbhtml    0.000125475536747951    0.000035
ZipVPP: False /Views/Home/Index.aspx    0.000476485344693378    0.000351
ZipVPP: False /Views/Home/Index.ascx    0.000554325119945653    0.000078
ZipVPP: False /Views/Shared/Index.aspx  0.000631632393110378    0.000077
ZipVPP: False /Views/Shared/Index.ascx  0.000704500969472239    0.000073
ZipVPP: False ~/Views/Home/_ViewStart.cshtml    0.000794229163423298    0.000090
ZipVPP: False ~/Views/Home/_ViewStart.vbhtml    0.000833389826910285    0.000039
ZipVPP: True ~/Views/_ViewStart.cshtml  0.000872745800133037    0.000039
ZipVPP: False ~/_ViewStart.cshtml   0.000935947959862434    0.000063
ZipVPP: False ~/_ViewStart.vbhtml   0.000972131211344948    0.000036
ZipVPP: True ~/Views/Shared/_Layout.cshtml  0.00102791407786914 0.000056
ZipVPP: False /Views/Home/LayoutPartials/Rotator.aspx   0.00113080303437734 0.000103

这表明它可能是 VPP 中的一个错误,但我不确定。

4

1 回答 1

0

解决方法是为通配符路由配置 IIS 6,以便所有请求(包括图像、css、脚本等)都通过 ASP.Net。这给了虚拟路径提供者一个机会。如果没有通配符路由,IIS 将查看文件扩展名,对于典型的静态文件类型,如.jpgor .css,只需在文件系统中查找文件。由于文件不存在,因此它返回 404。

要对此进行配置,请参阅N2CMS 虚拟路径提供程序在 Web 服务器上失败。调整路径以aspnet_isapi.dll对应您需要的 .Net 版本,并取消选中“检查文件是否存在”。

于 2012-08-29T18:08:11.000 回答