ASP.NET 路由

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

一. 什麼是路由? 一種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的第四個參數由於設置路由值的約束

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 摘要: 在 的版本變遷過程中,註解發生了很多的變化,然而代理的設計也發生了微妙的變化,從 的`ProxyFactoryBean Spring2.x Aspectj`註解,最後到了現在廣為熟知的自動代理。 說明: 代理的相關配置類 實現了 ,封裝了對 和`Advisor`的操作 該類及其子類主要是利用 ...
  • django搭建BBS 表單創建&註冊 0824自我總結 文件結構 app 介面 migrations _\_inint\_\_.py admin.py apps.py bbsform.py models.py tests.py views.py avatar BBS \_\_inint\_\_.p ...
  • 1. Lambda簡介 可以把Lambda表達式理解為簡潔地表示可傳遞的匿名函數的一種方式:它沒有名稱,但它有參數列表、函數主體、返回類型,可能還有一個可以拋出的異常列表。 匿名——我們說匿名,是因為它不像普通的方法那樣有一個明確的名稱:寫得少而想得多! 函數——我們說它是函數,是因為Lambda函 ...
  • 在設計Web應用程式的時候,經常需要把一個系統進行結構化設計,即按照模塊進行劃分,讓不同的Servlet來實現不同的功能,例如可以讓其中一個Servlet接收用戶的請求,另外一個Servlet來處理用戶的請求。為了實現這種程式的模塊化,就需要保證在不同的Servlet之間可以相互跳轉,而Servle ...
  • 概述 前後端分離之後,因為HTTP本身是無狀態的,Session就沒法用了。項目採用jwt的方案後,請求的主要流程如下:用戶登錄成功之後,服務端會創建一個jwt的token(jwt的這個token中記錄了當前的操作賬號),並將這個token返回給前端,前端每次請求服務端的數據時,都會將令牌放入Hea ...
  • 首先我要說一下自己對自由的理解: 自由是我可以選擇不幹什麼,但我要保留我可以乾什麼的可能性。 比如說我現在只有一個碼農的角色,但我仍然要保留可以扮演其他角色的可能, 比如成為一個作者,當我寫下文章的時候已經是了,所以是知名作者(這就是努力的意義啦), 又比如我想成為一個好的架構師和好的管理者,至少在 ...
  • 出於學習的目的,然後就寫了這個 下載地址 https://gitee.com/youlicc/a_simple_reptile 下圖,效果就是這樣... 總結分析 CreateRequest.cs這個類是我自己寫的。 這個基礎類是在github上找的,地址我忘了。使用理由:這份代碼搭建了基類模型。( ...
  • 用VS2019打開VS2015創建的MVC項目時所有引用全部失效: 解決方案: 打開項目的csproj文件,刪除 Target節點,在重新打開項目。 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...