我的IIS7.5竟然不支持ASP.NET路由
来源:互联网 发布:微信查删除好友软件 编辑:程序博客网 时间:2024/06/07 09:41
MVC模式下那些友好,屏蔽具体物理文件的URL让我眼馋,咱也想在WEB FORM项目用上一用。
按照指引,添加global.asax,写上路由代码什么的:
<%@ Application Language="C#" %><%@ Import Namespace="System.Web.Routing" %><script runat="server"> void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 RegisterRoutes(RouteTable.Routes); } public static void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("", "", "~/default.aspx"); routes.MapPageRoute("test", "h/{product}", "~/temp/test.aspx"); }
在IIS下一运行,居然报错,Page Not Found!
然后在VS2012里运行却可以,排除是路由写得不对的问题。
有大牛说,IIS7以前的版本,需要指定后缀名,加上.aspx,比如,应当用这种方式
routes.MapPageRoute("test", "h.aspx/{product}", "~/temp/test.aspx");
这说明,我这个IIS7.5里面,如果不指定.ASPX,根本没有经过ASP.NET的处理,路由不起作用。
这很奇怪,我的IIS是WIN7下的IIS7.5,应用程序池模式是集成,ASP.NET4.0,一切都符合传说中的“无须任何配置就可以直接使用ASP.NET路由”的条件。
难道是因为我装了微软的URL重写模块?卸载,重启,不行。
重新注册ASP.NET4.0,也是不行。
谁来告诉我?
======================================================================================
2013-09-11
洒家来告诉你。
只要在web.config里,<system.webServer>加上这句就可以鸟:
<system.webServer><modules runAllManagedModulesForAllRequests="true" /></system.webServer>
应用程序池的模式需要为集成模式。
如果是经典模式,则要使用后缀名了,路由中的路径如果没有特定后缀名的话,是到达不了ASP.NET处理这一层的。当然可以使用.aspx、.ashx、.asmx这样的后缀名,如:
routes.MapRoute( "test2", // 路由名称 "{controller}.aspx/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 );
不过容易混淆,如果项目是WEBFORM和MVC混用的话,就更加混乱了。因为为了避免对aspx页面使用MVC路由,通常会在global.asax里声明
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
这样MVC路由中有.aspx的将会被过滤掉。
可以使用.mvc:
routes.MapRoute( "test2", // 路由名称 "{controller}.mvc/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 );
注意.mvc不是ASP.NET保留的后缀名,需要在IIS里映射。有些文章里说装了MVC以后就会自动支持,但我的操作系统是WIN7,IIS为7.5,装了VS2012,从微软站点下载了MVC3、MVC4都装不上,IIS里也不默认支持MVC后缀,没关系,自己映射也一样的:
或者直接在web.config里写也是一样的:
<system.webServer> <handlers> <add name="MVC" path="*.mvc" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> </handlers>
但是这些似乎都是多此一举。因为如果是IIS7,用集成模式就什么问题都解决了。如果是IIS6,我在两台win2003 sp2 + IIS6上试过,安装了MVC3 + MVC4后,也跟集成模式一样,根本不用什么后缀名。
- 我的IIS7.5竟然不支持ASP.NET路由
- WIN7 + IIS7.5下对ASP.NET代码的调试
- ASP.NET在IIS7.5(IIS7)配置伪静态
- ASP.NET在IIS7.5(IIS7)配置伪静态
- ASP.NET在IIS7.5(IIS7)配置伪静态
- ASP.NET在IIS7.5(IIS7)配置伪静态
- II6 IIS7 下 asp.net的生命周期
- ASP.NET的路由系统:路由映射
- ASP.NET的路由系统
- 《Asp.net & IIS7 高级编程》读书笔记之 IIS7及Asp.net的分布式配置系统
- windows server2008的IIS7.5下不支持中文url解决办法
- IIS7发布asp.net站点
- IIS7中 配置Asp.net
- asp.net IIS7 503错误
- asp.net地址重写代码与IIS7.5中地址重写的配置方法(图)
- IE9/10/11 访问asp.net网站时(IIS7.5)的兼容性问题
- Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法
- IIS5、IIS6、IIS7的ASP.net 请求处理过程比较
- Zend Guard 5.5.0使用教程
- unresolved import in eclipse pydev
- 函数模板与类模板的区别
- 加密文件识别
- zend encoder——php加密专家
- 我的IIS7.5竟然不支持ASP.NET路由
- HDU 4671 Backup Plan (2013多校联合7 1006)
- poj 1442 堆操作
- PHP5.3、PHP5.4安装ZendOptimizer
- Spring Batch Connect to Oracle Example
- get和post方法区别
- MAX2150,ADF4106 python配置脚本
- Shiro(3)实现验证码认证
- VC winsock客户端多线程收发数据