ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
原文:ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
ASP.NET Core 屬性路由
經過前面章節的學習,想必你已經對 ASP.NET Core MVC 中的路由有了大概的了解,本來我想多花幾章節來講解路由規則,但是,作為基礎教程,我們還是講解下一個知識點吧。
在本章中,我們將學習另一種路由方法,即基於屬性的路由。
屬性路由
通過基於屬性的路由,我們可以在控制器類和這些類的內部方法上使用 C#
屬性。 這些屬性攜帶了告訴 ASP.NET Core 何時調用特定控制器的元數據
- 屬性路由是基於約定的路由的替代方案
- 路由按照它們出現的順序進行評估,也就是我們註冊它們的順序,映射多個路由的情況相當普遍,特別是如果我們想在 URL 中使用不同的參數或者如果要在 URL 中使用不同的文字
我們舉一個簡單的例子。
打開並運行 HelloWorld 項目,然後在瀏覽器中訪問應用程序。當我們訪問 / about
時,它會產生下面的輸出
我們想要的是,當我們訪問 /about
時,應用程序應該調用 AboutController
的 Phone
方法
針對這種情況,我們可以使用 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 基礎教程 - 簡單教程,簡單編程