是MVC2@VS2010的bug?还是MVC的机制?

部署环境:iis7/windows 2008 r2;.net 4;线程池采用.net4自动创建的“ASP.NET v4”
开发环境:vs2010,两个web.config和Global.asax.cs都没有改动过;我在IDE自己创建的Scripts目录中放入了脚步(js)文件,也引用了内置的Jquery文件;自己创建了Img目录,放置图片。
网站在Vs2010调试很正常,所有图片、脚步和样式文件都可以访问,但是发布到IIS7之后,除了页面文件和样式文件能够访问,其它的如图片和脚本文件都无法访问。
我查看了VS2010调试时的HTML源码,发现下面的问题(由于插入代码功能会将“../..”转成www.cnblogs.com,我只好用图片了):
 VS2010中的 原始代码(代码1):

 是MVC2@VS2010的bug?还是MVC的机制?_第1张图片

用VS2010的“发布”后,展现的代码(代码2):

 是MVC2@VS2010的bug?还是MVC的机制?_第2张图片
在VS2010调试时,从浏览器的“查看源文件”得到的HTML代码(代码3):

 是MVC2@VS2010的bug?还是MVC的机制?_第3张图片

部署到 IIS7@Windows2008 后,从浏览器的“查看源文件”得到的HTML代码(代码4):

 是MVC2@VS2010的bug?还是MVC的机制?_第4张图片
其中可以看到代码1和2是一样的,3和4也是一样的,但是一个在VS2010,一个在IIS7,呈现的结果就不一样了。

 

 

用httpwatch查看的结果是:查看VS2010调试时的结果:

是MVC2@VS2010的bug?还是MVC的机制?_第5张图片

查看部署到 IIS7@Windows2008 之后的结果(ExtjsDemo是应用程序名):

也就是说,IIS7的MVC吧脚本和图片文件的路径翻译错了,多返回了一层。一开始以为是MVC认目录,所以我把所有的Scripts和Img的文件全部拷贝到Content目录,但是结果都一样,从浏览器看到的JS的路径和CSS的路径就使差了一级文件夹。 

 

后来实在没办法了,我网站直接部署在根目录下(不设置虚拟目录(应用程序)),就正常了。

是MVC2@VS2010的bug?还是MVC的机制?_第6张图片

但是这只是一个取巧的做法,因为那是浏览器往上找文件的时候,发现已经到达根目录了,无法继续往上,所以直接取了根目录而已(估计在VS2010调试正常也是这个原因),并不是一种正常的做法。问题应该是在VS2010编译的时候,没有将除了CSS之外的其他路径翻译好,导致了浏览器会认错路径。

 

顺便提一下,在《将ASP.NET MVC 2.0 部署在IIS6和IIS7上的教程》一文中,提到了程序映射“*.mvc”,但是IIS7@WINDOWS2008应该是不需要的,因为我没有看到这个东西,网站照常访问。

你可能感兴趣的:(VS2010)