ASP.NET Core - 屬性路由



本章我們將學習另一種路由方法:基於屬性的路由。使用基於屬性的路由,我們可以在控制器類及其內部方法上使用 C# 屬性。這些屬性包含元資料,告訴 ASP.NET Core 何時呼叫特定控制器。

  • 它是基於約定的路由的替代方案。

  • 路由的評估順序與其出現的順序(即註冊順序)相同,但是對映多個路由非常常見,特別是當您希望在 URL 中使用不同的引數或不同的文字時。

示例

讓我們來看一個簡單的例子。開啟 **FirstAppDemo** 專案並在瀏覽器中執行應用程式。當您指定 **/about** 時,它將產生以下輸出:

Simple Example

我們想要的是,當我們指定 **/about** 時,應用程式應該呼叫 AboutController 的 Phone 操作。在這裡,我們可以使用 Route 屬性為該控制器強制執行一些顯式路由。此屬性位於 **Microsoft.AspNet.Mvc** 名稱空間中。

以下是添加了屬性路由的 **AboutController** 的實現。

using Microsoft.AspNet.Mvc;  

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks;  

namespace FirstAppDemo.Controllers { 
   [Route("about")] 
   public class AboutController { 
      [Route ("")] 
      public string Phone() { 
         return "+49-333-3333333"; 
      }  
      [Route("country")] 
      public string Country() { 
         return "Germany"; 
      } 
   } 
}

我們希望此路由看起來像 about,對於 Phone 操作,我們指定了一個空字串,這意味著我們不需要指定操作來獲取此方法。使用者只需要訪問 /about 即可。對於 Country 操作,我們在路由屬性中指定了“country”。讓我們儲存 AboutController,重新整理瀏覽器並訪問 /about,它應該會呼叫 Phone 操作。

Mobile Number

讓我們指定 **/about/country**。這將允許您訪問 Country 操作。

Same Country Result

如果您希望 URL 的一部分包含控制器的名稱,您可以做的就是,不是顯式使用控制器名稱,而是在方括號中使用令牌 controller。這告訴 ASP.NET MVC 在此位置使用此控制器的名稱,如下面的程式所示。

using Microsoft.AspNet.Mvc; 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks;  

namespace FirstAppDemo.Controllers { 
   [Route("[controller]")] 
   public class AboutController { 
      [Route ("")] 
      public string Phone() { 
         return "+49-333-3333333"; 
      }  
      [Route("[action]")] 
      public string Country() { 
         return "Germany"; 
      } 
   } 
} 

這樣,如果您重新命名控制器,您就不必記住更改路由。操作也是如此,控制器和操作之間隱含有一個斜槓 (/)。控制器和操作之間存在層次關係,就像 URL 中一樣。讓我們再次儲存此控制器。大多數情況下,您將看到相同的結果。

Rename the Controller

讓我們指定 /about/country。這將允許您訪問 Country 操作。

Rename the Controller
廣告
© . All rights reserved.