猿教程 Logo

Asp.Net Core-属性路由

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

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

  • 它是基于约定的路由的替代。

  • 路由按它们出现的顺序,您注册它们的顺序进行评估,但是很常见的是映射多个路由,特别是如果您想在URL中有不同的参数,或者您想在URL中有不同的字面值。


案例

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


我们想要的是,当我们指定url为/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操作方法。


让我们指定url为/about/country。 这将返回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"; 
      } 
   } 
}

这样,如果你重命名控制器,你不必重新改变路由。 对于Action方法也是这样,隐含地在控制器和Action方法之间存在斜杠(/)。 它是控制器和动作之间的层次关系,就像URL一样。 让我们再次保存此控制器。 很可能你会看到跟之前相同的结果。


让我们指定Url为/about/country。 这将允许您进入该Country操作方法。


阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/ASPNET-CORE/attribute-route.html