1. 程式人生 > >我的IIS7 5竟然不支援ASP NET路由

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

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

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後,也跟整合模式一樣,根本不用什麼字尾名。



           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述