ASP.NET Core – 属性路由
ASP.NET Core – 属性路由
在本章中,我们将学习另一种路由方法,即基于属性的路由。通过基于属性的路由,我们可以在控制器类和这些类内部的方法上使用 C# 属性。这些属性具有告诉 ASP.NET Core 何时调用特定控制器的元数据。
-
它是基于约定的路由的替代方案。
-
路由按照它们出现的顺序进行评估,你注册它们的顺序,但是映射多个路由是很常见的,特别是如果你想在 URL 中有不同的参数,或者如果你想在 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 操作,我们在 route 属性中指定了“country”。让我们保存 AboutController,刷新您的浏览器并转到 /about 并应该为您提供 Phone 操作。

让我们指定/about/country。这将使您能够进入该国家/地区行动。

如果您希望 URL 的一部分包含您的控制器的名称,您可以做的不是显式使用控制器名称,而是可以在方括号内使用令牌控制器。这告诉 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。这将使您能够进入该国家/地区行动。