ASP.NET Core - 属性路由

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

  • 它是传统的替代方案 - 基于路由.

  • 路由按照它们出现的顺序,您注册它们的顺序进行评估,但是映射多条路线非常常见,特别是如果你想要在URL中使用不同的参数,或者您希望在URL中使用不同的文字.

示例

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

简单示例

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

以下是 AboutController 的实现,其中属性路由为使用Microsoft.AspNet.Mvc添加.

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"; 
      } 
   } 
}


这里我们希望这条路线看起来像我们指定的电话操作一个空字符串,这意味着我们不需要指定操作来获取此方法.用户只需要来/到.对于Country操作,我们在route属性中指定了"country".让我们保存AboutController,刷新浏览器并转到/about,然后给你电话操作.

手机号码

我们指定/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.这将允许您进入该国家/地区的操作.

重命名控制器