📜  ASP.NET Core-属性路由

📅  最后修改于: 2020-11-21 04:56:21             🧑  作者: Mango


在本章中,我们将学习另一种路由方法,即基于属性的路由。通过基于属性的路由,我们可以在控制器类以及这些类内部的方法上使用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"; 
      } 
   } 
}

在这里,我们希望此路由看起来像,对于Phone操作,我们指定了一个空字符串,这意味着我们不需要指定操作即可获取此方法。用户只需要来到/ about。对于“国家/地区”操作,我们在路径属性中指定了“国家/地区”。让我们保存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。这将使您可以执行该国家/地区行动。

重命名控制器