我的IIS7.5竟然不支持ASP.NET路由

时间:2022-08-29 09:18:28

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后缀,没关系,自己映射也一样的:

我的IIS7.5竟然不支持ASP.NET路由

或者直接在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路由的更多相关文章

  1. ASP&period;NET路由&lbrack;ASP&period;NET Routing&rsqb;

    ASP.NET路由[ASP.NET Routing] ASP.NET路由允许你在使用URL时不必匹配到网站中具体的文件,因为这个URL不必匹配到一个文件,你使用了描述用户行为且更容易被用户理解的URL ...

  2. Win7、win2008中让IIS7支持asp的方法

    Win7或Windows server 2008中IIS7支持ASP+Access解决方法.  1. 让IIS7支持ASP  Win7或Windows server 2008中IIS7是默认不安装的, ...

  3. 为支持ASP&period;NET5跨平台,Jexus再添新举措

    Jexus作为一款运行于Linux/FreeBSD平台上,以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的 ...

  4. 移动支持 &ndash&semi; ASP&period;NET MVC 4 系列

           目前,有各种各样的方法可以提高网站应用程序的移动体验.在某些情况下,我们只想在小规格上做一些微小的风格变化:另一些情况下,我们可能完全改变外观显示或者一些视图的内容:最极端的情况下,我们 ...

  5. 支持ASP&period;NET WebService

    ASP.NET WebService默认返回的数据格式是XML,但也能返回JSON格式. 如何让MiniUI组件支持ASP.NET WebService? 只需要: 1) 引用miniui-webse ...

  6. MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 &lpar;支持asp&period;net mvc&rpar;

    该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...

  7. 烂泥:nginx同时支持asp&period;net与php

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 经过两天的实验,终于让nginx同时支持asp.net与php了.下面就把具体的配置过程记录如下. 注意:本次实验OS:centos6 64bit. 尽 ...

  8. WCF 无法激活服务,因为它不支持 ASP&period;NET 兼容性。已为此应用程序启用了 ASP&period;NET 兼容性

    无法激活服务,因为它不支持 ASP.NET 兼容性.已为此应用程序启用了 ASP.NET 兼容性.请在 web.config 中关闭 ASP.NET 兼容性模式,或将 AspNetCompatibil ...

  9. 让Apache支持ASP&period;NET

    Apache是目前广泛使用的一种网络服务器程序,不仅在UNIX/LINUX平台上被大量使用,而且在Windows平台上也有许多站点放弃了IIS 而转向Apache..NET是微软推出的功能强大的开发技 ...

随机推荐

  1. TiQuery

    TiQuery 是一个基于JQuery 的在Titanium上使用的 javascript 库 TiQuery 为TI 提供了很快捷的方法: // Utilities $.info('My messa ...

  2. win8 VB6打开提示MSCOMCTL&period;ocx未注册

    从xp上复制相应的文件到win8相应的位置,如果是不可以,win8中反注册此控件,再注册此控件

  3. iOS之 PJSIP蓝牙外设音频支持

    如题,蓝牙设备作为音频输出,在app中如果包含VoIP那么就要设定当连接蓝牙设备时候是否选择或者支持蓝牙输出 最近在处理一个工单就是公司的voip-app与硬件话机底座联调(蓝牙2.0)坑爹的如果是4 ...

  4. 几个常见的Laravel报错及解决方法

    报错:「Can't swap PDO instance while within transaction」 transactions >= 1) {throw new RuntimeExcept ...

  5. svn项目冲突时显示无法加载项目的解决方法

    1.无法加载的项目会显示成灰色.这是右键点击编辑  打开后去掉乱字符. 2.完成后会有红色的叹号 这是右键 找到解决冲突即可 然后提交

  6. linux常用命令2

    1.top 最近自己最常用的是 top d -1(每秒刷新一次) 主要看Mem used使用内存:CPU idle 剩余CPU:CPMMAND进程:以及%CPU进程所占用CPU. 目前主要是系统出问题 ...

  7. python 基础 列表

    1.列表list()方法用于将元组转换为列表,[]组成,中间可以放很多内容,每一项使用逗号隔开,列表中可以放置任何数据类型的数据.注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放括号 ...

  8. Android中intent的分类及使用

    intent分为隐式和显式,显式的浅显易懂就是直呼其名,可用intent类的一个构造函数,直接传入context和想要打开的活动的名称.还可以用setcomponent方法来确定要打开的活动的名称.而 ...

  9. 超恶心的TP模版取值

    一.JS事件中 在使用H-uiAdmin做后台开发的时候,碰到了使用元素点击触发js函数展示弹窗的写法 但是在js函数中还需要使用U函数生成url以及使用$vo.id来传值 反复试了一下模版标签的写法 ...

  10. maven默认本地仓库

    本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库.这样在你下次使用的时候就不需要从远程下载了.如果你所需 ...