ASP.NET Core 属性路由

在本章中,我们将学习另一种路由方法,即基于属性的路由。通过基于属性的路由,我们可以在控制器类和这些类内部的方法上使用 C# 属性。这些属性具有告诉 ASP.NET Core 何时调用特定控制器的元数据。

  • 它是基于约定的路由的替代方案。
  • 路由是按照它们出现的顺序进行计算的,也就是您注册它们的顺序,但是映射多个路由是很常见的,特别是如果您希望在 URL 中具有不同的参数,或者如果您希望 URL 中具有相同的文字。

实例

让我们举一个简单的例子。打开 MyFirstCoreWebApp 项目并在浏览器中运行应用程序。当您指定 /about 时,它将产生以下输出:

这里我们需要的是,当我们指定 /about 时,应用程序应该调用 AboutController 的 Phone 操作。这里,我们可以使用 Route 属性为该控制器强制执行一些显式路由。此属性位于命名空间Microsoft.AspNet.Mvc 中。

以下是 AboutController 的实现,其中添加了属性路由。

  1. using Microsoft.AspNetCore.Mvc;
  2. namespace MyFirstCoreWebApp.Controllers
  3. {
  4. [Route("[about]")]
  5. public class AboutController : Controller
  6. {
  7. [Route("")]
  8. public string Phone()
  9. {
  10. return "+49-333-3333333";
  11. }
  12. [Route("[action]")]
  13. public string Country()
  14. {
  15. return "Germany";
  16. }
  17. }
  18. }

在这里,我们希望此路由看起来像,并且对于 Phone 操作,我们指定了一个空字符串,这意味着我们不需要指定该操作来获取此方法。用户只需要了解一下。对于 Country 操作,我们在 route 属性中指定了 "Country"。让我们保存 AboutController,刷新您的浏览器,然后转到 /about,并应为您提供 Phone 操作。

让我们指定 /about/country。这将使您能够转到 Country 操作。