none
MVC專案routes.IgnoreRoute的實際用途 RRS feed

  • 問題

  • 各為前輩大家好,最近嘗試自己研究MVC專案,不太明白Routerconfig.cs

    下的routes.IgnoreRoute實際用途,雖然明白他的用意是不透過Routing處理

    的網址,但是實際的用途為何 ? 有人會無聊去瀏覽 *.axd的網址 ? 我自己寫了

    一個cs繼承IHttpHandler,然後瀏覽頁面http://xxxxxx/1.axd,也成功把資料

    顯示了,但是不懂這有何意義 ? 直接response.write不就好了 ? (黑人問號)

    2018年4月2日 上午 07:56

解答

  • WebForm 走的是 IIS 的路由系統,指定檔案名稱 .aspx, .axd ... 式的路由。

    MVC 走的是 Route 的路由系統,也就是 /home/index 的路由。

    那一行意思是,只要符合條件的路由均不走 MVC 的路由系統,可以想成,MVC 不接受此請求。

    但上層還有一個 IIS,所有 .axd 會被 IIS 路由接手處理。

    如果兩者都沒符合,正常會丟出 404 錯誤。


    理直氣和,切記。

    個人

    2018年4月3日 上午 03:36
  • 在使用MVC框架時,同時又需存在ASP.NET WEB FORM頁面的情況。

    例如您有一個MVC架構開發的新專案,而另有一個既有的ASP.NET Web Form開發的既有專案,

    您想要逐步把既有專案的Web Form的功能移植入新專案,但又沒有足夠的時間改寫,

    此時就可以利用這個方法,建立一個資料夾存Web Form的頁面如.axd/.aspx,

    讓MVC的路由(Route)忽略(Ignore)此資料夾中的頁面處理,交由Web Form以HTTP 處理常式副檔名來判斷如何處理。如此使得Web Form及MVC的程式可以並存,就不用急著將所有程式改寫為MVC,或乾脆就讓他並存,但可能會造成後續維護成本。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");


    • 已編輯 salingers 2018年4月3日 上午 09:31
    • 已標示為解答 maggiore.sung 2018年4月11日 上午 09:32
    2018年4月3日 上午 09:00

所有回覆

  • MVC之外,Web Form是舊有ASP.NET的一個開發框架。

    常見 routes.IgnoreRoute 使用,在一個新的MVC專案中,加入既有使用Web Form開發的網頁。

    如此就可以新舊框架程式混合,而不一定要將所有舊有的框架程式升級。

    (當然還需要配合改寫WebHandler,網路上可以找到範例。)

    例如:

    routes.Ignore("{resource}.axd/{*pathInfo}");
    2018年4月2日 上午 09:19
  • 感謝大大的回覆,不過想不知道甚麼情況下需要用到

    routes.Ignore("{resource}.axd/{*pathInfo}");

    還是您的意思是說,習慣寫Asp.net web form不想走MVC的routing

    的方式,才是主要的目的 ?


    2018年4月2日 上午 11:43
  • routes.Ignore可以用來控制那種類型的檔案不要加上routing處理, 這行程式碼就是指定當使用者瀏覽副檔名為*.axd的檔案時不要加上Routing處理
    2018年4月2日 下午 11:30
  • WebForm 走的是 IIS 的路由系統,指定檔案名稱 .aspx, .axd ... 式的路由。

    MVC 走的是 Route 的路由系統,也就是 /home/index 的路由。

    那一行意思是,只要符合條件的路由均不走 MVC 的路由系統,可以想成,MVC 不接受此請求。

    但上層還有一個 IIS,所有 .axd 會被 IIS 路由接手處理。

    如果兩者都沒符合,正常會丟出 404 錯誤。


    理直氣和,切記。

    個人

    2018年4月3日 上午 03:36
  • 那看來在MVC的專案下,感覺這行看起來實際沒有很大的用途

    謝謝大大的解惑。


    2018年4月3日 上午 08:15
  • 在使用MVC框架時,同時又需存在ASP.NET WEB FORM頁面的情況。

    例如您有一個MVC架構開發的新專案,而另有一個既有的ASP.NET Web Form開發的既有專案,

    您想要逐步把既有專案的Web Form的功能移植入新專案,但又沒有足夠的時間改寫,

    此時就可以利用這個方法,建立一個資料夾存Web Form的頁面如.axd/.aspx,

    讓MVC的路由(Route)忽略(Ignore)此資料夾中的頁面處理,交由Web Form以HTTP 處理常式副檔名來判斷如何處理。如此使得Web Form及MVC的程式可以並存,就不用急著將所有程式改寫為MVC,或乾脆就讓他並存,但可能會造成後續維護成本。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");


    • 已編輯 salingers 2018年4月3日 上午 09:31
    • 已標示為解答 maggiore.sung 2018年4月11日 上午 09:32
    2018年4月3日 上午 09:00
  • 「沒有很大的用途」這句話,我無法同意。

    是你不了解他在做什麼,而不是沒有很大的用途。


    理直氣和,切記。

    個人

    2018年4月3日 上午 09:27
  • 沒錯,應該省慎用字才對,應該是說要看怎樣的情況來決定,

    經過大家的解釋能理解它的存在原因,謝謝各位的分享。

    2018年4月11日 上午 09:33