想用 c#的 mvc 实现一个功能. - V2EX
wangybsyuct
·
2024-11-22
·
via C#
 |
|
24
wangybsyuct 2024 年 12 月 9 日
@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#,还是很自由的。
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。