- ASP.NET Core 教程
- ASP.NET Core - 首頁
- ASP.NET Core - 概述
- ASP.NET Core - 環境設定
- ASP.NET Core - 新建專案
- ASP.NET Core - 專案佈局
- ASP.NET Core - project.json
- ASP.NET Core - 配置
- ASP.NET Core - 中介軟體
- ASP.NET Core - 異常處理
- ASP.NET Core - 靜態檔案
- ASP.NET Core - 設定 MVC
- ASP.NET Core - MVC 設計模式
- ASP.NET Core - 路由
- ASP.NET Core - 屬性路由
- ASP.NET Core - 操作結果
- ASP.NET Core - 檢視
- 設定 Entity Framework
- ASP.NET Core - DbContext
- ASP.NET Core - Razor 佈局檢視
- ASP.NET Core - Razor 檢視啟動
- ASP.NET Core - Razor 檢視匯入
- ASP.NET Core - Razor 標籤助手
- ASP.NET Core - Razor 編輯表單
- ASP.NET Core - 身份驗證概述
- ASP.NET Core - Authorize 屬性
- 身份驗證配置
- ASP.NET Core - 身份遷移
- ASP.NET Core - 使用者註冊
- ASP.NET Core - 建立使用者
- ASP.NET Core - 登入和登出
- ASP.NET Core 有用資源
- ASP.NET Core - 快速指南
- ASP.NET Core - 有用資源
- ASP.NET Core - 討論
ASP.NET Core - 屬性路由
本章我們將學習另一種路由方法:基於屬性的路由。使用基於屬性的路由,我們可以在控制器類及其內部方法上使用 C# 屬性。這些屬性包含元資料,告訴 ASP.NET Core 何時呼叫特定控制器。
它是基於約定的路由的替代方案。
路由的評估順序與其出現的順序(即註冊順序)相同,但是對映多個路由非常常見,特別是當您希望在 URL 中使用不同的引數或不同的文字時。
示例
讓我們來看一個簡單的例子。開啟 **FirstAppDemo** 專案並在瀏覽器中執行應用程式。當您指定 **/about** 時,它將產生以下輸出:
我們想要的是,當我們指定 **/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 操作。
讓我們指定 **/about/country**。這將允許您訪問 Country 操作。
如果您希望 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 中一樣。讓我們再次儲存此控制器。大多數情況下,您將看到相同的結果。
讓我們指定 /about/country。這將允許您訪問 Country 操作。