日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

构建可读性更高的 ASP.NET Core 路由

發(fā)布時間:2025/3/16 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构建可读性更高的 ASP.NET Core 路由 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
構(gòu)建可讀性更高的 ASP.NET Core 路由 原文:構(gòu)建可讀性更高的 ASP.NET Core 路由

?一、前言

  不知你在平時上網(wǎng)時有沒有注意到,絕大多數(shù)網(wǎng)站的 URL 地址都是小寫的英文字母,而我們使用 .NET/.NET Core MVC 開發(fā)的項目,因為在 C# 中類和方法名采用的是 Pascal 命名規(guī)范,根據(jù) .NET 框架默認的路由規(guī)則,項目的 URL 地址會呈現(xiàn)出大小寫混合的情況。對于強迫癥來說,這種情況絕對不能忍,當(dāng)然,由于整個項目的 URL 地址大小寫混合顯示,也無法更清晰的向用戶、瀏覽器表達出當(dāng)前頁面的功能。那么,這篇文章就來介紹下,如何調(diào)整我們的 ASP.NET Core 項目的路由規(guī)則,從而使我們項目的 URL 地址可讀性更高。

  PS:在構(gòu)建 URL 的過程中,采用大寫的地址還是采用小寫的地址,每個人都會有自己的想法和這樣做的理由,這篇文章不討論兩種方案的優(yōu)劣,只是提供一種構(gòu)建小寫 URL 地址以及讓我們的 URL 可讀性更高的解決方案,請友善觀看,切勿互懟。

  代碼倉儲:https://github.com/Lanesra712/grapefruit-common

?二、Step by Step

  在構(gòu)建項目的路由時,不管是采用大寫的 URL 路由,還是采用小寫的 URL 路由,我們首先需要確保的是,我們需要將整個項目的 URL 格式進行統(tǒng)一。不能說一個項目一部分的 URL 地址用大寫的,而另一部分采用的是小寫的 URL 地址。同時,同一個頁面的大寫的路徑以及小寫的路徑,雖然最終服務(wù)器可能都會將兩個地址指向同一個頁面,但是對于搜索引擎的收錄來說,這無疑是兩個頁面。

  試想以下,當(dāng)別人告訴了我們一個有趣的網(wǎng)站,我們從瀏覽器的地址欄中輸入網(wǎng)址進行訪問。當(dāng)我們輸入 URL 地址時,不管是中文輸入法還是英文輸入法,輸出的英文字母都是小寫的,此時,如果輸入的網(wǎng)址中存在大寫字母,嗯,我們還需要使用 CapsLock 鍵進行大小寫切換。

  另外,我們知道,對于 Windows 服務(wù)器來說,因為對于路徑的大小寫不敏感,如果我們弄錯了地址的大小寫,我們還是可以進行正常的訪問的,可是,如果將應(yīng)用部署到 Linux 服務(wù)器上的話。。。。

  至于更好的可讀性,這個概念可能會顯得有些主觀。簡單來說,就是當(dāng)我們面對一個網(wǎng)址時,我們可以很清楚的通過這個網(wǎng)址知道這個網(wǎng)頁的主要內(nèi)容。例如,當(dāng)我們看見www.youdomain.com/editor/post/new 這個網(wǎng)址時,雖然可能并沒有打開這個網(wǎng)頁,但我們還是可以大致猜到這個頁面可能是新增文章的。可是,如果你收到的網(wǎng)址是 www.youdomain.com/9rg7f2/i?HXI-D+iaj34 這樣的,沒人能知道這個頁面到底是干啥的。

  因此,為了便捷輸入,首先我們需要將我們的 URL 地址轉(zhuǎn)換成小寫的形式,在 ASP.NET Core 中,微軟提供了 RoutingServiceCollectionExtensions.AddRouting 這個擴展方法可以讓我們將 URL 地址轉(zhuǎn)換成小寫。
  打開項目的 Startup.cs 文件,找到 ConfigureServices 方法,在方法體內(nèi)添加下面的代碼。

services.AddRouting(options => {options.LowercaseUrls = true; });

  示例項目的頂部鏈接代碼如下所示,運行項目可以看到,通過設(shè)置小寫路由后,程序根據(jù) Controller 和 Action 自動生成的 URL 地址全部變成了小寫。仔細觀察可以發(fā)現(xiàn),這里會出現(xiàn)一個問題。在某些特殊的情況下,Area/Controller/Action 可能是由多個英文字母拼接而成的一個混合英文單詞,如果把這個混合的單詞全部進行小寫而不進行拆分的話,整個項目的 URL 可讀性更低了。

<header><nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"><div class="container"><a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Sample</a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse"><ul class="navbar-nav flex-grow-1"><li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a></li><li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a></li><li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="Post" asp-action="DraftSetting">Draft Setting</a></li></ul></div></div></nav> </header>

  在 Startup 類中的 Configure 方法里,我們定義了針對包含 Area 和不包含 Area 的兩個路由模板,整個項目的 URL 都是根據(jù)這兩個模板進行生成的。那么這里我們是不是可以通過對單個 Controller 或是 Action 指定特殊的 URL 格式呢?

app.UseMvc(routes => {routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");routes.MapRoute(name: "areas",template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); });

  答案當(dāng)然是可以的。在 ASP.NET Core 中,我們可以通過在 Controller 或是 Action 方法上添加 RouteAttribute 的方式將用戶自定義路由信息添加到項目的路由表中。例如這里我在 DraftSetting 這個 Action 上使用特性路由的方式手動指定當(dāng)前 Action 生成特殊的 URL 格式。?

public class PostController : Controller {[Route("post/draft-setting")]public IActionResult DraftSetting(){return View();} }

  雖然這樣可以解決我們的問題,可以一旦項目有新增頁面時,就要手動的指定特性路由地址,這樣似乎有些麻煩。那么,如何自動的讓程序幫我們實現(xiàn)這一功能呢?

  在 ASP.NET Core 2.2 版本中,微軟為我們提供了參數(shù)轉(zhuǎn)換器這一概念,我們可以通過實現(xiàn) IOutboundParameterTransformer 這個接口,從而將 URL 中路由的值或者是 URL 中路由參數(shù)的值按照我們的需求進行轉(zhuǎn)換。就像下面的代碼中,我通過實現(xiàn)這個接口,從而實現(xiàn)將多個英文單詞生成的混合單詞以 hyphen(-) 的形式進行分隔。

public class SlugifyParameterTransformer : IOutboundParameterTransformer {public string TransformOutbound(object value){return value == null? null: Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();} }

  這里我使用 hyphen(-) 作為 URL 中各個單詞間的連字符,是因為對于搜索引擎來說,它會將 - 視為單詞間分隔符,采用這種風(fēng)格的 URL 更有利于搜索引擎收錄。

  當(dāng)接口功能實現(xiàn)之后,我們就需要對我們的默認全局路由進行修改。首先,我們需要在路由模板上指定需要替換的路由參數(shù),這里我們指定 Area、Controller、Action 是需要進行路由參數(shù)轉(zhuǎn)換的變量。

app.UseMvc(routes => {routes.MapRoute(name: "default",template: "{controller:slugify=Home}/{action:slugify=Index}/{id?}");routes.MapRoute(name: "areas",template: "{area:exists:slugify}/{controller:slugify=Home}/{action:slugify=Index}/{id?}"); });

  當(dāng)定義好參數(shù)轉(zhuǎn)換器以及需要轉(zhuǎn)換的 URL 路由參數(shù)后,我們就可以在 AddRouting 方法中通過 ConstraintMap 進行配置需要轉(zhuǎn)換的參數(shù)路由值。至此就可以完成我們進行路由參數(shù)轉(zhuǎn)換的結(jié)果。

services.AddRouting(options => {options.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);options.LowercaseUrls = true; });

?

?三、總結(jié)

?  ?在本章中,我們主要是調(diào)整了 ASP.NET Core 項目中的默認路由,從而使項目的 URL 地址具有更好的可讀性。通過使用小寫路由和 hyphen(-) 路由,只是構(gòu)建可讀性更高的 URL 地址的第一步,在構(gòu)建頁面時,我們更應(yīng)該考慮的是如何使用少數(shù)的單詞就可以讓用戶清楚當(dāng)前頁面的功能,更簡短,更易讀的 URL 不僅對于用戶,對于搜索引擎也是更友好的。

posted on 2019-05-31 14:41 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/10955158.html

總結(jié)

以上是生活随笔為你收集整理的构建可读性更高的 ASP.NET Core 路由的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国精品国产自在久不卡 | 在线观看色视频 | 黑人毛片网站 | 一卡二卡三卡在线视频 | 影音先锋在线播放 | 亚洲精品字幕在线观看 | 国产黄色片免费看 | 欧美成人aaa片一区国产精品 | 日韩毛片在线免费观看 | 日韩爱爱片 | 欧美黑粗大 | 这里有精品| 久一精品| 婷婷五月在线视频 | 国产在线观看99 | 国产亚洲精品美女久久久 | 毛片高清免费 | 亚洲特黄特色 | 永久av在线免费观看 | 男女日皮视频 | 99精品视频一区二区三区 | ass亚洲熟妇毛耸耸pics | 国产高清第一页 | 亚洲第一页av | 免费黄在线 | 国产精品va在线 | 久久久片 | 黄色资源在线观看 | 亚洲综合色av | 高清一区二区 | 欧美成人黄色片 | 中文字幕三级视频 | 日本三级视频在线播放 | 免费在线观看黄色av | 91色区| 97色吧| 欧美丝袜一区二区 | 欧美日韩另类视频 | 非洲黄色片 | 久久在线免费视频 | 日本少妇激三级做爰在线 | jizz毛片| 日韩精品人妻一区二区中文字幕 | 日韩一三区 | 另类图片亚洲色图 | 黄色小视频免费 | 亚洲图片一区二区 | 国产免费高清av | 麻豆视频免费网站 | 四虎影院在线看 | 在线亚洲人成电影网站色www | 爱逼综合网| 午夜av在线免费观看 | 天天干天天操天天碰 | 91麻豆免费看 | 18禁肉肉无遮挡无码网站 | 久久青青| 色女仆影院 | 亚洲第一区在线播放 | 两性视频久久 | 韩国特级毛片 | 97在线观看免费视频 | 国产精品第二页 | 免费看黄色一级片 | 曰本三级日本三级日本三级 | 亚洲视频一二 | 99视频在线免费观看 | 蜜桃久久av | 毛片视频网站在线观看 | 日韩福利在线视频 | 成年人免费在线观看视频网站 | 一本到在线观看 | 日韩少妇中文字幕 | 国产女主播av | 精品久久蜜桃 | 国产婷婷色一区二区三区在线 | 日本不卡免费 | 免费在线激情视频 | 欧美激情国产日韩精品一区18 | 日本在线免费看 | 麻豆国产在线视频 | 在线观看国产日韩 | 国产成人手机在线 | 一区二区三区中文视频 | 黄色一级生活片 | 黄色免费视屏 | 亚洲一线二线在线观看 | 亚洲激情视频在线播放 | 亚洲影视中文字幕 | 午夜影院一区二区三区 | 国产精品视频自拍 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 我们的生活第五季在线观看免费 | 欧美成人精品在线 | 黄色网址在线免费观看 | 亚欧日韩 | 中文av网站 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 久久蜜臀精品av |