@
gbw1992 @
jifengg @
lzzy1994 @
ahswch @
ahswch @
skydcnmana @
ddup @
wellerman @
quan01994 @
a33291 @
Mithril 感谢大家的提出的宝贵意见,特别是 ddup 和 Mithril 。
最后解决了,是路由的问题,解决办法比较麻烦,windows2003 带的 iis 是 6.0 ,把网站 [属性] 里 [主目录] 的配置[映射]里加入.php,可执行文件填入 C:\WINDOWS\
Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 。
这样 IIS 就认为 php 文件是一个自己要解析的文件了,自己写的 mvc 主程序里 Global.asax.cs 才会获取路由。
但是 IIS 版本和 visual studio 2010 的调试模式处理方式不同。
visual studio 2010 的调试模式下,只要在路由 routes.MapRoute 里"{controller}/{action}/{id}",改为"{controller}/{action}.php/{id}",就可以实现。
但是在 IIS 里不行,虽然获取到路由,但是不认,无法抛弃.php,只解析 action 。
后来在 Global.asax.cs 里加入 protected void Application_BeginRequest(object sender, EventArgs e),里面使用 Request.Url.PathAndQuery 获取整个链接参数,
这里把.php 的 action 强制 HttpContext.Current.RewritePath ,特别神奇的是,无论是 Get 还是 POST 参数,都能完整地传递过去。
这里的坑是 vs2010 调试模式和 IIS 是不同的。
vs2010
使用.net 版本是 4.0,带的 mvc 版本是 2.0 ,本想升级一下 mvc 版本,因为想用 Razor ,后来怕又出现什么坑,就放弃了,使用默认的 aspx ,里面可以写 c#,还是很自由的。