ASP.NET MVC5路由系統機制詳細講解

来源:http://www.cnblogs.com/itliuyang/archive/2017/05/18/6872027.html
-Advertisement-
Play Games

請求一個ASP.NET mvc的網站和以前的web form是有區別的,ASP.NET MVC框架內部給我們提供了路由機制,當IIS接受到一個請求時,會先看是否請求了一個靜態資源(.html,css,js,圖片等),這一步是web form和mvc都是一樣的,如果不是則說明是請求的是一個動態頁面,就 ...


請求一個ASP.NET mvc的網站和以前的web form是有區別的,ASP.NET MVC框架內部給我們提供了路由機制,當IIS接受到一個請求時,會先看是否請求了一個靜態資源(.html,css,js,圖片等),這一步是web form和mvc都是一樣的,如果不是則說明是請求的是一個動態頁面,就會走asp.net的管道,mvc的程式請求都會走路由系統,會映射到一個Controller對應的Action方法,而web form請求動態頁面是會查找本地實際存在一個aspx文件。下麵通過一個ASP.NET MVC5項目來詳細介紹一下APS.NET MVC5路由系統的機制。

一、認識Global.asax.cs

當我們創建一個APS.NET MVC5的項目的時候會在項目的根目錄中生成一個Global.asax文件。
 1 public class MvcApplication : System.Web.HttpApplication
 2 {
 3         protected void Application_Start()
 4         {
 5             //註冊 ASP.NET MVC 應用程式中的所有區域
 6             AreaRegistration.RegisterAllAreas();
 7             //註冊 全局的Filters
 8             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 9             //註冊 路由規則
10             RouteConfig.RegisterRoutes(RouteTable.Routes);
11             //註冊  打包綁定(js,css等)
12             BundleConfig.RegisterBundles(BundleTable.Bundles);
13         }
14 }

這個Application_Start方法會在網站啟動的自動調用,其中我們看到:RouteConfig.RegisterRoutes(RouteTable.Routes);這個就是向ASP.NET MVC 框架註冊我們自定義的路由規則,讓之後的URL能夠對應到具體的Action。接下來我們再來看看RegisterRoutes方法做了些什麼?

 1 public class RouteConfig
 2 {
 3         public static void RegisterRoutes(RouteCollection routes)
 4         {
 5             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 6             routes.MapRoute(
 7                 name: "Default",
 8                 url: "{controller}/{action}/{id}",
 9                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
10             );
11         }
12 }
上面代碼是vs自動為你們生成,只定義了一個預設規則。 1、規則名:Default 2、URL分段:{controller}/{action}/{id},分別有三段,第一段對應controller參數,第段為action參數,第三段為id參數 3、URL段的預設值:controller為Home,action為Index,id = UrlParameter.Optional表示該參數為可選的。 之所以我們訪問http://www.xx.com/ 這樣的URL網址能正確返回,是因為我們設置了URL段的預設值,相當於訪問: http://www.xx.com/Home/Index   RegisterRoutes調用的是RouteCollection的MapRoute方法,RouteCollection是一個集合,繼承於Collection<RouteBase>

 

二、ASP.NET MVC預設的命名約定

1、Controller命名約定

Controller類必須以Controller結尾,比如:HomeController,ProductController。我們在頁面上用HTML heper來引用一個Controller的時只需要前面Home,Product就可以,ASP.NET MVC框架自帶的DefaultControllerFactory自動為我們在結尾加上Controller,並開始根據這個名字開始找對應的類。我們創建一個ASP.NET MVC項目新加的Controller,文件會自動放在根目錄的Controllers文件夾裡面,我們剛開始可以看到有一個HomeController.cs。當然你也可以實現介面IControllerFactory,定義自己的ControllerFactory來改變查找Controller文件的行為。我會再以後的文章中介紹。

2、View命名約定

ASP.NET MVC的視圖View預設情況是放在根目錄的Views文件下的,規則是這樣的:/Views/ControllerName/ActionName.cshtml。比如:HomeController的Action名字為Index的視圖對應文件為:/Views/Home/Index.cshtml 因此是通過Controller和Action的名字來確定視圖文件的位置的。採用這個命名約定的好處是在Action返回視圖的時候會MVC框架會按照這個約定找到預設的視圖文件。比如在ProductController的Action方法List最後是這樣的代碼: return View(); 會自動去路徑,/Views/Product/找文件List.cshtml(或者List.aspx如果使用的老的視圖引擎)。 當然也可以指定視圖的名字: return View("~/Views/Product/List.cshtml") 或者 return View("MyOtherView")   MVC框架在查找具體的預設視圖文件時,如果在/Views/ControllerName/下麵沒有找到,會再在/Views/Shared下麵找,如果都沒找到就會找錯:找不到視圖。  

三、ASP.NET MVC的URL規則說明

最開始我們在網站的Application_Start事件中註冊一些路由規則routes.MapRoute,當有請求過來的時候,mvc框架會用這些路由規則去匹配,一旦找到了符合要求就去處理這個URL。例如有下麵這個URL: http://mysite.com/Admin/Index URL可以分為幾段,除去主機頭和url查詢參數,MVC框架是通過/來把URL分隔成幾段的。上面的URl分為兩段。如下圖: 第一段的值為Admin,第二段的值為Index,我們是很容易看出Admin對應就是Controller,Index就是Action。但是我們要告訴MVC框架這樣的規則,因此為下麵的Application_Start有下麵的代碼:
1 routes.MapRoute(
2                 name: "Default",
3                 url: "{controller}/{action}/{id}",
4                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
5 );
上面表示URL規則是: {controller}/{action}  這個路由規則有兩個段,第一個是controller,第二個是action。聲明url段每個部分要且{}括起來,相當於占位符,是變數。 當一個URL請求到來的時候MVC路由系統就負責把它匹配到一個具體的路由規則,並把URL每段的值提取出來。這裡說“一個具體的路由規則”,是因為可能會註冊多個路由規則,MVC路由系統會根據註冊順序一個一個的查找匹配,直到到為止。 預設情況,URL路由規則只匹配與之有相同URL段數量的URL。如下表:
URL URL段
http://mysite.com/Admin/Index controller = Admin action = Index 
http://mysite.com/Index/Admin controller = Index action = Admin 
http://mysite.com/Apples/Oranges controller = Apples action = Oranges
http://mysite.com/Admin 無匹配-段的數量不夠
http://mysite.com/Admin/Index/Soccer 無匹配-段的數量超了
 

四、mvc創建一個簡單的Route規則

我們在前面註冊路由規則都是通過下麵的方式:
1 public static void RegisterRoutes(RouteCollection routes) {
2  
3     routes.MapRoute("MyRoute", "{controller}/{action}");
4 }

用到了RouteCollection的MapRoute方法。其實我們還可以調用 Add方法,傳一個Route的實例給它一樣的達到相同的效果。

1 public static void RegisterRoutes(RouteCollection routes) {
2  
3     Route myRoute = new Route("{controller}/{action}", new MvcRouteHandler());
4     routes.Add("MyRoute", myRoute);
5 }

五、mvc路由的預設值的設定

之前有說:URL路由規則只匹配與之有相同URL段數量的URL,這種是嚴格,但是我們又想有些段不用輸入,讓用戶進入指定的頁面。像,http://www.xx.com/Home/就是進入進入Home的Index。只需要設定mvc路由的預設值就可以了。
1 public static void RegisterRoutes(RouteCollection routes) {
2     routes.MapRoute("MyRoute", "{controller}/{action}", new { action = "Index" });  
3 }

要設置Controller和Action的預設值。

1 public static void RegisterRoutes(RouteCollection routes) {
2  
3 routes.MapRoute("MyRoute", "{controller}/{action}",
4         new { controller = "Home", action = "Index" });
5 } 
下麵是一個具體的Url對應的Route映射。
Url段的數量 實例 Route映射
0 mydomain.com  controller = Home action = Index 
1 mydomain.com/Customer controller = Customer action = Index 
2 mydomain.com/Customer/List controller = Customer action = List 
3 mydomain.com/Customer/List/All 無匹配—Url段過多 
 

六、mvc使用靜態URL段

前面定義路由規則都是占位符的形式,{controller}/{action},我們也可以使用在使用靜態字元串。如:
1 public static void RegisterRoutes(RouteCollection routes) {
2  
3     routes.MapRoute("MyRoute", "{controller}/{action}",
4         new { controller = "Home", action = "Index" });
5  
6     routes.MapRoute("", "Public/{controller}/{action}",
7        new { controller = "Home", action = "Index" });
8 }
上面匹配:http://mydomain.com/Public/Home/Index 路由:"Public/{controller}/{action}"只匹配有三段的url,第一段必須為Public,第二和第三可以是任何值,分別用於controller和action。 除此這外,路由規則中可以既包含靜態和變數的混合URL段,如:
 1 public static void RegisterRoutes(RouteCollection routes) {
 2  
 3     routes.MapRoute("", "X{controller}/{action}");
 4  
 5     routes.MapRoute("MyRoute", "{controller}/{action}",
 6         new { controller = "Home", action = "Index" });
 7  
 8     routes.MapRoute("", "Public/{controller}/{action}",
 9        new { controller = "Home", action = "Index" });
10  
11 } 

七、mvc的路由中自定義參數變數

mvc框架除了可以定義自帶的controller和action的參數之外,還可以定義自帶的變數。如下:
1 public static void RegisterRoutes(RouteCollection routes) {
2  
3     routes.MapRoute("MyRoute", "{controller}/{action}/{id}",
4         new { controller = "Home", action = "Index", id = "1" });
5 } 
上面定義了一個id,預設值我們設為1。 這個路由可以匹配0-3個url段的url,第三個url段將被用於id。如果沒有對應的url段,將應用設置的的預設值。 自定義參數變數使用: 方法一、
1 public ViewResult CustomVariable() {
2  
3 ViewBag.CustomVariable = RouteData.Values["id"];
4     return View();
5 }
MVC框架從URL獲取到變數的值都可以通過RouteData.Values["xx"],這個集合訪問。 方法二、
1 public ViewResult CustomVariable(int id) {
2  
3 ViewBag.CustomVariable = id;
4     return View();
5 }

MVC框架使用內置的Model綁定系統將從URL獲取到變數的值轉換成Action參數相應類型的值。這種轉換除了可以轉換成基本int,string等等之外還可以處理複雜類型,自定義的Model,List集合等。

八、mvc定義可選URL段、可選參數

asp.net mvc定義 參數是也可以設置為可選的,這樣用戶可以不用輸入這部分的參數。

1、註冊路由時定義可選URL段

public static void RegisterRoutes(RouteCollection routes) {       routes.MapRoute("MyRoute", "{controller}/{action}/{id}",         new { controller = "Home", action = "Index", id = UrlParameter.Optional }); }  

2、通過Action參數來定義可選參數

public ViewResult CustomVariable(string id = "DefaultId") {   ViewBag.CustomVariable = id;     return View(); }  通過Action參數來定義可選參數是沒有加預設值的,而通過註冊路由時定義可選URL段是加了預設值的,是利用c#參數的預設參數特性。這樣如果用戶沒有輸入這部分url段,就會預設值就會被使用。  

九、mvc使用*來定義變長數量的URL段

除了在路由規則中聲明固定的數量的URL段,我們也可以定義變長數量的URL段,如下麵代碼: public static void RegisterRoutes(RouteCollection routes) {       routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",         new { controller = "Home", action = "Index", id = UrlParameter.Optional }); } 通過變數前面加一個星號(*)開頭就能匹配任意變長數量的URL。 匹配URL如下:
Url段的數量 實例 Route映射
0 mydomain.com  controller = Home action = Index 
1 mydomain.com/Customer controller = Customer action = Index 
2 mydomain.com/Customer/List controller = Customer action = List 
3 mydomain.com/Customer/List/All controller = Customer action = List id = All 
4 mydomain.com/Customer/List/All/Delete controller = Customer action = List id = All catchall = Delete  
5 mydomain.com/Customer/List/All/Delete/Perm controller = Customer action = List id = All catchall = Delete /Perm

十、mvc使用命名空間來為路由的Controller類定優先順序

當一個用戶輸入一個URL請求ASP.NET MVC的網站時,ASP.NET MVC會根據URL的獲取請求是找到是哪一個Controller類,如果一個項目有多相同的類名的Controller,就會有問題。比如:當請求的變數controller的值為Home時,MVC框架就會去找一個Controller名字為HomeController的類,這個類(HomeController)預設是不受限制的,如果多個命名空間都有名字為HomeContoller的類, ASP.NET MVC就不知道怎麼辦了。當這種情況發生是,就會報錯: “/”應用程式中的伺服器錯誤。 找到多個與名為“Home”的控制器匹配的類型。如果為此請求(“{controller}/{action}/{id}”)提供服務的路由沒有指定命名空間以搜索與此請求相匹配的控制器,則會發生這種情況。如果是這樣,請通過調用帶有 'namespaces' 參數的 "MapRoute" 方法的重載來註冊此路由。   “Home”請求找到下列匹配的控制器: WebApplication1.Controllers.HomeController WebApplication1.Controllers1.HomeController    [InvalidOperationException: 找到多個與名為“Home”的控制器匹配的類型。如果為此請求(“{controller}/{action}/{id}”)提供服務的路由沒有指定命名空間以搜索與此請求相匹配的控制器,則會發生這種情況。如果是這樣,請通過調用帶有 'namespaces' 參數的 "MapRoute" 方法的重載來註冊此路由。 “Home”請求找到下列匹配的控制器: 解決辦法:
1 public static void RegisterRoutes(RouteCollection routes) {
2  
3     routes.MapRoute("Default",
4                 "{controller}/{action}/{id}",
5                  new { controller = "Home", action = "Index", id = UrlParameter.Optional },
6                  new string[] { "WebApplication1.Controllers" }
7             );
8 }
上面MapRoute的最後一個參數,new string[] { "WebApplication1.Controllers" }就是指定先去命名空間為WebApplication1.Controllers查找在controller,如果找到就停止往下找,沒找到還是會去其它命名空間中去找的。因此當你指定的這個命名空間如果沒存在要找的controller類,而在其它命名空間是有的,是會正常執行的,所以這裡指定命名空間並不是限定了命名空間,而只是設了一個優先順序而已。  

十一、mvc定義路由規則的約束

在前面我們介紹了為mvc路由的規則設置路由預設值和可選參數,現在我們再深入一點,我們要約束一下路由規則。

1、用正則表達式限制asp.net mvc路由規則

1 public static void RegisterRoutes(RouteCollection routes) {
2  
3      routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
4         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
5         new { controller = "^H.*"},
6         new[] { "URLsAndRoutes.Controllers"});
7 }
上面用到正則表達式來限制asp.net mvc路由規則,表示只匹配contorller名字以H開頭的URL。

2、把asp.net mvc路由規則限制到到具體的值

1 public static void RegisterRoutes(RouteCollection routes) {  
2  
3     routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
4         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
5         new { controller = "^H.*", action = "^Index$|^About$"},
6         new[] { "URLsAndRoutes.Controllers"});
7 } 

上例在controller和action上都定義了約束,約束是同時起作用是,也就是要同時滿足。上面表示只匹配contorller名字以H開頭的URL,且action變數的值為Index或者為About的URL。

3、把asp.net mvc路由規則限制到到提交請求方式(POST、GET)

1 public static void RegisterRoutes(RouteCollection routes) {
2  
3     routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
4         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
5         new { controller = "^H.*", action = "Index|About",
6             httpMethod = new HttpMethodConstraint("GET") },
7         new[] { "URLsAndRoutes.Controllers" });
8 }

上面表示只匹配為GET方式的請求。

4、使用介面IRouteConstraint自定義一個asp.net mvc路由約束

下麵我自定義一個約束對特定瀏覽器進行處理。 UserAgentConstraint.cs:
 1 using System.Web;
 2 using System.Web.Routing;
 3  
 4 namespace URLsAndRoutes.Infrastructure {
 5  
 6     public class UserAgentConstraint : IRouteConstraint {
 7         private string requiredUserAgent;
 8  
 9         public UserAgentConstraint(string agentParam) {
10             requiredUserAgent = agentParam;
11         }
12  
13         public bool Match(HttpContextBase httpContext, Route route, string parameterName,
14                           RouteValueDictionary values, RouteDirection routeDirection) {
15  
16             return httpContext.Request.UserAgent != null &&
17                 httpContext.Request.UserAgent.Contains(requiredUserAgent);
18         }
19     }
20 } 

asp.net mvc自定義路由約束的使用:

 1 public static void RegisterRoutes(RouteCollection routes) {
 2  
 3     routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
 4         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
 5         new {
 6             controller = "^H.*", action = "Index|About",
 7             httpMethod = new HttpMethodConstraint("GET", "POST"),
 8             customConstraint = new UserAgentConstraint("IE")
 9         },  
10         new[] { "URLsAndRoutes.Controllers" });
11 } 
上面表示這個路由規則只匹配用戶使用IE瀏覽器的請求。利用這點我們就可以實現不同瀏覽器使用不同的Controller,進行不同的處理。雖然這樣做的意義不大,但是不排除有時會有這種變態的需求。  

十二、mvc將URL路由到磁碟文件

mvc的網站並不是所以的url請求都是對應controller,action,我們仍然要一種方式來提供一些靜態內容,比如:html文件,css,圖片,javascript文件些,其實預設情況下mvc框架在在收到url請求時會先判斷這個url是否是對應一個磁碟中真實存在的文件,如果是直接返回,這時路由是沒有使用到的,如果不是真實存在的文件時才會走路由系統,再去匹配註冊的路由規則。 這種預設的處理url機制順序我們也可以改變它,讓在檢查物理文件之前就應用路由,如下:
 1 public static void RegisterRoutes(RouteCollection routes) {
 2  
 3     routes.RouteExistingFiles = true;
 4  
 5     routes.MapRoute("DiskFile", "Content/StaticContent.html",
 6         new {
 7             controller = "Account", action = "LogOn",
 8         },
 9         new {
10             customConstraint = new UserAgentConstraint("IE")
11         });
12  
13     routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
14         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
15         new {
16             controller = "^H.*", action = "Index|About",
17             httpMethod = new HttpMethodConstraint("GET", "POST"),
18             customConstraint = new UserAgentConstraint("IE")
19         },
20         new[] { "URLsAndRoutes.Controllers" });
21 }

我們把RouteExistingFiles屬性設置為true,表示存在的文件也走路由,上面我們把Content/StaticContent.html這個文件映射到controller 為Account,action 為LogOn中了,而並不是指磁碟中存在的文件。基於asp.net mvc的這個特性我們就可以實現mvc以.html結尾的偽靜態

十三、mvc跳過、繞開路由系統設定

上面我們用使用routes.RouteExistingFiles = true,讓所有的請求都走路由系統過一下,難免有一些性能影響,因為一些圖片,一些真正的html,文件是沒有必要的。我們可以對些文件做一些起特殊設定讓它們跳過、繞開路由系統。下麵就是讓Content目錄下的所有文件都繞開mvc的路由系統:
 1 public static void RegisterRoutes(RouteCollection routes) {
 2  
 3     routes.RouteExistingFiles = true;
 4  
 5     routes.MapRoute("DiskFile", "Content1/StaticContent.html",
 6         new {
 7             controller = "Account", action = "LogOn",
 8         },
 9         new {
10             customConstraint = new UserAgentConstraint("IE")
11         });
12  
13     routes.IgnoreRoute("Content/*{filename}");
14      routes.MapRoute("", "{controller}/{action}");  
15       
16 }

 


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

-Advertisement-
Play Games
更多相關文章
  • #code:utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header smtpser ...
  • Samba起源: 早期網路想要在不同主機之間共用文件大多要用FTP協議來傳輸,但FTP協議僅能做到傳輸文件卻不能直接修改對方主機的資料數據,這樣確實不太方便,於是便出現了NFS開源文件共用程式:NFS(NetworkFile System)是一個能夠將多台Linux的遠程主機數據掛載到本地目錄的服務 ...
  • 首先在linux伺服器上安裝ftp [root@host2 test]#yum -y install ftp vsftpd [root@host2 test]#service vsftpd start [root@host2 test]#chkconfig vsftpd --list [root@h ...
  • 7.1 常量 常量 是值從不變化的符號。定義常量符號時,它的值必須能夠在編譯時確定。 只能定義編譯器識別的基元類型的常量,如果是非基元類型,需把值設為null。 常量的值直接嵌入代碼,所以不能獲取常量地址,不能以傳引用的方式傳遞常量。 不能很好地支持跨程式集的版本控制(修改一個DLL中的常量值,需要 ...
  • 怎麼將XML字元串轉換為XmlDocument,並獲取部分節點值??? 總結關鍵知識點: 1-如何將XML字元串轉換為XmlDocdument:   XmlDocument xmlDocument = new XmlDocument();   xmlDocument.LoadXml(xmlSt... ...
  • ASP.NET mvc的最好的優點之一就是支持Model驗證,這個特性很方便你可以選擇在定義Model的時候在欄位中採用特性進行註解約定,也可以在代碼中自己進行手動驗證。下麵就來細說一下ASP.NET MVC Model驗證多種方式的實現。 一、瞭解什麼是ASP.NET MVC Model驗證 首先 ...
  • 前言 目前 EF Core 的最新版本為 ,所以本篇文章主要是針對此版本的一些說明。 註意:如果你要在Visual Studio 中使用 .NET Core 2.0 , 你需要至少 Visual Studio 2017 15.3 預覽版本。 安裝或升級到 EF Core 2.0 你可以通過以下命令來 ...
  • ASP.NET mvc的razor視圖引擎是一個非常好的.NET MVC框架內置的視圖引擎。一般情況我們使用.NET MVC框架為我們提供的這個Razor視圖引擎就足夠了。但是有時我們想在我們的項目支持多模板&skins機制,比如我們可能會有多套的模板,也就是多個View風格,而我們只需要改一下配置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...