今天偶然发现一个怪现象, 一个旧项目在我本地运行时, 登录页面的图片怎么都显示不出来, 经仔细验证, 功能不受影响, 并且登录以后的图片都可以正确显示. 而且, 只有在VS内置的Web server上无法显示, 如果挂在IIS上, 是可以显示的.
我并不相信是VS那个web server的bug, IIS虽然可以显示, 大约是因为IIS的各种规则比较宽松. 所以项目肯定是有问题的. 经过测试, 发现把验证模式改为Windows, 则登录图片可以显示, 改回Forms则不行. web.config配置如下:
<authentication mode="Forms">
<forms name=".ASPPLUS" protection="All" loginUrl="login.aspx" timeout="40" path="/">
</forms>
</authentication>
经过一番推测, 大概跟protection="All" 有关, 再看一下
<authorization>
<deny users="?"/>
</authorization>
猜测肯定是权限问题, 于是把deny改成<allow users="*"/>, 再一试, 果然好了.
总结一下问题, 想到原因肯定是加载图片时, 发现还未登录, 所以拒绝访问, 这样图片就无法显示, 而登录以后则所有图片都可以正常显示. 既然知道了原因, 只要将images目录设为不需要验证即可:
首先把<authorization>节改回deny, 确保其它页面不能被非法访问, 然后在web.config中增加对images目录的特殊配置:
<location path="Images">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
这样, 就允许了images目录随时被访问, 并且其它目录需要登录后才能访问. 重新测试, ok.
Response.Redirect(Request.ApplicationPath+"Front.aspx");
转载地址:http://moosdau.blog.163.com/blog/static/43711282010101510424219/