我正在使用NuGet包构建一个使用N2的网站(我正在直接从GitHub编译)。构成/ 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中的一个错误,但我不确定。
答案 0 :(得分:0)
修复是为通配符路由配置IIS 6,以便所有请求(包括图像,css,脚本等)都通过ASP.Net。这为虚拟路径提供者提供了机会。如果没有通配符路由,IIS将查看文件扩展名,对于典型的静态文件类型,如.jpg
或.css
,只需查找文件系统中的文件即可。由于文件不存在,因此返回404。
要进行配置,请参阅N2CMS virtual path provider fails on web server。调整aspnet_isapi.dll
的路径以对应您需要的.Net版本,并取消选中“检查该文件是否存在。”