91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何構建可讀性更高的ASP.NET Core路由

發布時間:2021-12-06 14:52:26 來源:億速云 閱讀:155 作者:iii 欄目:云計算

本篇內容介紹了“如何構建可讀性更高的ASP.NET Core路由”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Step by Step

        在構建項目的路由時,不管是采用大寫的 URL 路由,還是采用小寫的 URL 路由,我們首先需要確保的是,我們需要將整個項目的 URL 格式進行統一。不能說一個項目一部分的 URL 地址用大寫的,而另一部分采用的是小寫的 URL 地址。同時,同一個頁面的大寫的路徑以及小寫的路徑,雖然最終服務器可能都會將兩個地址指向同一個頁面,但是對于搜索引擎的收錄來說,這無疑是兩個頁面。
        試想以下,當別人告訴了我們一個有趣的網站,我們從瀏覽器的地址欄中輸入網址進行訪問。當我們輸入 URL 地址時,不管是中文輸入法還是英文輸入法,輸出的英文字母都是小寫的,此時,如果輸入的網址中存在大寫字母,嗯,我們還需要使用 CapsLock 鍵進行大小寫切換。
        另外,我們知道,對于 Windows 服務器來說,因為對于路徑的大小寫不敏感,如果我們弄錯了地址的大小寫,我們還是可以進行正常的訪問的,可是,如果將應用部署到 Linux 服務器上的話。。。。

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

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

1
2
3
4
services.AddRouting(options =>
{
   options.LowercaseUrls = true;
});

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<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 都是根據這兩個模板進行生成的。那么這里我們是不是可以通過對單個 Controller 或是 Action 指定特殊的 URL 格式呢?

1
2
3
4
5
6
7
8
9
10
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?}");
});

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

1
2
3
4
5
6
7
8
public class PostController : Controller
{
   [Route("post/draft-setting")]
   public IActionResult DraftSetting()
   {
       return View();
   }
}


        雖然這樣可以解決我們的問題,可以一旦項目有新增頁面時,就要手動的指定特性路由地址,這樣似乎有些麻煩。那么,如何自動的讓程序幫我們實現這一功能呢?
        在 ASP.NET Core 2.2 版本中,微軟為我們提供了參數轉換器這一概念,我們可以通過實現 IOutboundParameterTransformer 這個接口,從而將 URL 中路由的值或者是 URL 中路由參數的值按照我們的需求進行轉換。就像下面的代碼中,我通過實現這個接口,從而實現將多個英文單詞生成的混合單詞以 hyphen(-) 的形式進行分隔。

1
2
3
4
5
6
7
8
9
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 中各個單詞間的連字符,是因為對于搜索引擎來說,它會將 - 視為單詞間分隔符,采用這種風格的 URL 更有利于搜索引擎收錄。
        當接口功能實現之后,我們就需要對我們的默認全局路由進行修改。首先,我們需要在路由模板上指定需要替換的路由參數,這里我們指定 Area、Controller、Action 是需要進行路由參數轉換的變量。

1
2
3
4
5
6
7
8
9
10
11
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?}"
   );
});

        當定義好參數轉換器以及需要轉換的 URL 路由參數后,我們就可以在 AddRouting 方法中通過 ConstraintMap 進行配置需要轉換的參數路由值。至此就可以完成我們進行路由參數轉換的結果。

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

“如何構建可讀性更高的ASP.NET Core路由”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新巴尔虎左旗| 定日县| 湟源县| 中西区| 疏附县| 哈密市| 新余市| 鄂托克前旗| 建阳市| 临城县| 云南省| 宁乡县| 五台县| 沙洋县| 明光市| 镇巴县| 科技| 灌南县| 梧州市| 山阳县| 孟连| 博野县| 上饶县| 沅陵县| 息烽县| 清镇市| 聂拉木县| 会宁县| 盖州市| 丰镇市| 天津市| 开阳县| 南阳市| 鄂托克前旗| 德安县| 潼关县| 沛县| 兴宁市| 海林市| 阿瓦提县| 河南省|