ASP.NET 路由

来源:https://www.cnblogs.com/MedlarCanFly/archive/2019/08/24/11402184.html

一. 什麼是路由? 一種URL(統一資源定位符)的體現方式,將URL映射到方法的調用。 轉變觀念:(URL未必是指Web伺服器上的靜態資源文件)。 二. 為什麼使用路由? 如同規範的代碼縮進一樣,這是對代碼質量的提高,是對URL的重視; 消除必須使用物理文件映射 URL 的弊端; 防止註入式攻擊,提 ...


一. 什麼是路由?

一種URL(統一資源定位符)的體現方式,將URL映射到方法的調用。

轉變觀念:(URL未必是指Web伺服器上的靜態資源文件)。

 

二. 為什麼使用路由?

  • 如同規範的代碼縮進一樣,這是對代碼質量的提高,是對URL的重視;
  • 消除必須使用物理文件映射 URL 的弊端;
  • 防止註入式攻擊,提高安全性。傳統的URL和磁碟上的內容有著直接對應的關係,通過URL就可以確定該站點的目錄結構,路由是把請求映射到控制器的操作,較為安全;
  • 可以約束URL的各個部分。

 

三. 如何定義路由?

創建一個ASP.NET MVC項目,打開應用程式文件(Global.asax.cs),可以看到在Application_Start方法中調用了RouteConfig.RegisterRoutes方法,該方法就是集中控制路由的地方。

F12轉到方法定義,它在/App_Start/RouteConfig.cs文件中。

一.特性路由

調用MapMvcAttributeRoutes()方法啟用特性路由:

特性路由,顧名思義,通過特性來定義路由。

在Controllers中添加一個空的Home控制器。

1.為方法添加一個Route特性

 

(URL為/Index的請求時,就會運行Index方法)

 

(通過 / 、/Index 都能訪問)

2.路由值(動態路由)

通過花括弧創建了一個占位符,如:/Index/xiaoming 就會匹配到這個路由。

 

問題:以下情況下' /Index '會匹配那個路由呢?

結論:靜>動

 

3.控制器路由

如果一個方法寫一個路由( [Route(ControlName/ActionName)] )的話,就會有重覆的代碼,這時候就可以在控制器(類)上添加路由特性。

使用特殊路由參數action

(可以通過 /Home/Index 、/Home/About 分別訪問Index和About方法)

 

通過=號賦值的方式為路由參數提供預設值

(請求為 /Home 時預設請求 Index)

通過?號為路由定義可選參數

 

這時候如果通過/Home/1 請求的話會提示404,因為如果URL為兩段的話它會把 ‘1’匹配到 action  。

 

4.路由約束

 

這個時候你請求' /About/2 ' 的時候就會提示請求不明確

通過約束解決

(只用當參數為int值時才會匹配第一個About)

像這樣放到路由模板中的約束叫內聯約束,還有很多:

 

二 . 傳統路由

 回到RegisterRoutes方法,清空代碼,添加一個傳統路由

controller和action是特殊參數,它們映射到控制器和方法,在傳統路由中是必須參數,沒有的話會報500的錯誤,提示不包括所需的“controller”路由值。

傳統路由有更靈活的路由語法規則

{controller}/{action}/{id}
{controller}-{action}-{id}
{controller}-{action}.{id}
...

上面這些都是有效的路由。

 

MapRoute的第三個參數由於設置預設值

        public static void RegisterRoutes(RouteCollection routes)
        {
            //映射指定的URL路由
            routes.MapRoute("simple", "{controller}/{action}/{id}",new {
                id= UrlParameter.Optional,  //設置id參數為可選參數
                action= "Index" //設置action參數的預設值為Index
            });
        }

 

 MapRoute的第四個參數由於設置路由值的約束

 

 


您的分享是我們最大的動力!

更多相關文章
  • VAR 是 .net 3.5 新出的一個定義變數的類型 其實也就是弱化類型的定義 VAR 可以替代任何類型,編譯器會根據上下文來判斷你到底用是想用什麼類型的 至於什麼情況下用到 VAR 就是你自己無法確定自己將用的是什麼類型,在你自己也都可使用 VAR VAR類型比 object 類型效率高 使用 ...
  • 大家都明白,程式員寫出的程式與用戶直接使用的程式之間還有一個簡單的環節,就是打包。今天就簡單介紹下用InstallShield 2015打包工具進行程式的打包, 有興趣的可以看看! 首先前面安裝打包工具的過程就不過多的介紹了,網上的資源很多自行下載就行了。我們從安裝完成後開始說! 安裝完成後界面出現 ...
  • 一、構造函數 構造函數是類的特殊方法,它永遠不會返回值(即使是void),並且方法名和類名相同,同樣支持重載。在使用new關鍵字創建對象時構造函數被間接調用,為對象初始化欄位和屬性的值。 無參構造函數即預設構造函數,在我們沒有創建任何構造函數時,編譯器會為我們創建一個預設構造函數,反之當我們創建了任 ...
  • 使用Settings sync同步VS Code配置 因為要在多臺電腦上使用VSCode,想要簡單地管理VSCode地配置,不用每次手動去一一配置,保持多個開發環境的同步,於是使用Settings sync插件來實現這個需求。 第一步:在VS Code中安裝Settings sync插件 第二步:在 ...
  • 項目文件結構圖 1. 消息監聽器(黃色框) 這部分由 Netty 實現,Netty是一個非同步且非阻塞的通信框架。TCP通信實現服務端和客戶端的交互。 Netty 的簡單描述如下: 客戶端(調用方):負責發送要執行的指令。 服務端(接收方):分為主從線程。主線程負責接收指令,將指令存入緩存區中,等待執 ...
一周排行
  • 上一章介紹了配置的多種數據源被註冊、載入和獲取的過程,本節看一下這個過程系統是如何實現的。(ASP.NET Core 系列目錄) 一、數據源的註冊 在上一節介紹的數據源設置中,appsettings.json、命令行、環境變數三種方式是被系統自動載入的,這是因為系統在webHost.CreateDe ...
  • Controller繼承ControllrBase,ControllerBase繼承IController,而IController里只有一個Execute方法 1、ControllrBase里的Execute(),裡面調用了ExecuteCore(),而ExecuteCore()是個抽象方法,抽象 ...
  • @[toc] 前言 中秋過完不知不覺都已經快兩周沒動這個工程了,最近業務需要總算開始搞後臺雲服務了,果斷直接net core搞起,在做的中間遇到了不少問題,這個後續會一點點列出來包括解決方法,今天就先把之前挖的坑填一個。 Redis 之前在緩存那篇提到過, Cookie , Session , Ca ...
  • 對try catch finally的理解1.finally 總是會運行的,即使在catch中thorw拋出異常了。2.finally 在 return後沒有結束,而是繼續運行finally2.順序的話就是對try-》finally 或者 try-》catch-》finally不管怎樣finally ...
  • 原文地址:https://blog.csdn.net/FL1623863129/article/details/89013137 VS2019於昨日正式發佈,博主立馬下載一個專業版嘗嘗鮮,但是發現項目打開都沒反應,而且VS2019都死在進程,怎麼也打不開,這不是安裝包而是沒有以管理員運行,只要在屬性 ...
  • 單例類public class SnappingClass : ISnappingEnvironment, IExtension { // private static readonly SnappingClass instance = null; static SnappingClass() { ... ...
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr ...
  • 期待已久的.NET Core 3.0即將發佈! .NET Core 3.0在.NET Conf上發佈。大約還有9個多小時後,.NET Conf開始啟動。 為期3天的大概日程安排如下: 第1天-9月23日 9:00-10:00 Microsoft Studios播出的主題演講10:00-17:00從M ...
  • 場景 Winform中實現讀取xml配置文件並動態配置ZedGraph的RadioGroup的選項: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100540708 在上面實現了將RadioGroup的選項根據配置文件動態配置後 ...
  • 原文地址: https://blog.csdn.net/chadcao/article/details/7859394 ASP.NET的安全認證,共有“Windows”、“Form”、“Passport”、“None”四種驗證模式。下麵來說說From認證,內容分三部分: 第一部分—— 怎樣實現Fro ...
x