1. 程式人生 > >ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

clear 產生 names border 知識 是我 netcore sid tps

原文:ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

ASP.NET Core 屬性路由

經過前面章節的學習,想必你已經對 ASP.NET Core MVC 中的路由有了大概的了解,本來我想多花幾章節來講解路由規則,但是,作為基礎教程,我們還是講解下一個知識點吧。

在本章中,我們將學習另一種路由方法,即基於屬性的路由。

屬性路由

通過基於屬性的路由,我們可以在控制器類和這些類的內部方法上使用 C# 屬性。 這些屬性攜帶了告訴 ASP.NET Core 何時調用特定控制器的元數據

  1. 屬性路由是基於約定的路由的替代方案
  2. 路由按照它們出現的順序進行評估,也就是我們註冊它們的順序,映射多個路由的情況相當普遍,特別是如果我們想在 URL 中使用不同的參數或者如果要在 URL 中使用不同的文字

我們舉一個簡單的例子。

打開並運行 HelloWorld 項目,然後在瀏覽器中訪問應用程序。當我們訪問 / about 時,它會產生下面的輸出

技術分享圖片

我們想要的是,當我們訪問 /about 時,應用程序應該調用 AboutControllerPhone 方法

針對這種情況,我們可以使用 Microsoft.AspNetCore.Mvc 命名空間下的 Route 屬性為該控制器強制執行一些顯式路由

下面的代碼是添加了屬性路由的 AboutController

的實現

using System;
using Microsoft.AspNetCore.Mvc;
namespace HelloWorld.Controllers
{
    [Route("about")]
    public class AboutController
    {
        public AboutController()
        {
        }

        [Route("")]
        public string Phone()
        {
            return "+10086"; 
        }  

        [Route("country")]
        public string Country()
        {
            return "中國"; 
        } 
    }
}

在這裏,我們給 Phone() 方法添加了一個空的路由屬性,這意味用戶只需要訪問 /about,而不需要指定操作就可以訪問此方法。對於 country 方法,我們在路由屬性中指定了 country

保存下 AboutController.cs ,刷新瀏覽器並訪問 /about,我們可以看到正常輸出了電話號碼

技術分享圖片

如果我們訪問 /about/country ,那麽這將訪問 AboutController 控制器中的 Country() 方法

技術分享圖片

如果希望 URL 的一段包含我們的控制器的名稱,那麽我們可以不直接顯示指定控制器的名稱,取而代之的是在方括號內使用令牌控制器,這用於告訴 ASP.NET MVC 在此位置使用此控制器的名稱

如以下程序中所示

using System;
using Microsoft.AspNetCore.Mvc;

namespace HelloWorld.Controllers
{
    [Route("[controller]")]
    public class AboutController
    {
        public AboutController()
        {
        }

        [Route("")]
        public string Phone()
        {
            return "+10086"; 
        }  

        [Route("[action]")]
        public string Country()
        {
            return "中國"; 
        } 
    }
}

使用這種方式,即使我們重命名路由器,也不必去更改路由。 對於一個動作也是一樣,並且隱式地在控制器和動作之間有一個斜杠 ( / ) 。 它是控制器和動作之間的層次關系,就像它在 URL 中一樣

我們再次保存這個 AboutController.cs 文件,重新運行應用程序,我們會看到相同的結果

技術分享圖片

如果我們訪問 /about/country ,那麽這將訪問 AboutController 控制器中的 Country() 方法

技術分享圖片

ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程