zoukankan      html  css  js  c++  java
  • 在ASP.NET Core中构建路由的5种方法

    原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 

    在ASP.NET Core中构建路由的5种方法 

     

     

    by Team Stormpath | August 17, 2016 | 

     

    在软件开发中,路由用于将所有传入请求映射到处理程序,并生成响应中使用的URL。在ASP.NET Core中,路由已经从根本上重写了。以前,使用MVC和Web API进行路由非常相似,但两者都使用不同的框架(和代码)来执行相同的操作。一个重要的区别是Web API默认支持RESTful路由。例如,如果一个控制器的操作方法名称开头Post,那么调用一个HTTP Post默认情况下会调用该方法。 

    由于微软决定重建和统一路由框架,现在适用于MVC,也适用于Web API。然而,在我们深入了解如何构建路由之前,让我们回顾一下为什么路由对您的应用程序非常重要。 

    为什么路由? 

    SEO友好 

    REST式配置的路由有助于您的内容的搜索引擎优化(SEO)。网站的网址是影响网站排名的首要标准之一。通过将www.yourwebsite.com/articles/show/123转换为www.yourwebsite.com/how-to-peel-potatoes,您鼓励搜索引擎对与“how to peel potatoes.”有关的关键语句进行排名。 

    此外,如果您的网址具有更强的描述性,则用户可以更轻松地预测内容,从而增加页面上的时间,这也会影响SEO和整体页面权限。 

    网址不需要映射文件 

    没有路由,传入的请求将被映射到物理文件。通过路由,我们可以完全控制请求,使我们能够决定在某个HTTP请求进入时我们执行的操作和控制器。 

    长URL和文件扩展名可以省略 

    在许多参数和过滤器都在使用的情况下,路由有助于缩短URL。通过消除文件扩展名,我们可以隐藏我们正在工作的环境。 

    那么,我们如何利用这些好处呢?让我们看看您可以在ASP.NET Core应用程序中构建路由的五种方法。 

    1.创建默认路由 

    您可以按照惯例在您的项目Startup类中定义默认路由。 

     

    1 

    2 

    3 

    4 

    5 

    6 

    7 

    8 

    9 

    10 

    11 

    12 

    13 

    14 

    15 

    16 

    17 

    18 

    public class Startup 

    { 

        public void ConfigureServices(IServiceCollection services) 

        { 

            services.AddMvc(); 

        } 

      

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 

        { 

            app.UseMvc(routes => 

            { 

                routes.MapRoute( 

                    name: "default", 

                    template: "  {controller=Home}/{action=Index}/{id?}"); 

            }); 

        } 

    } 

    通过以上,我们确保我们项目中的基本配置存在于Controller + Action + ID(可选)路径的标准MVC模式中。你也可以像这样声明路由模式: 

     

    1 

    2 

    3 

    4 

    5 

    6 

    routes.MapRoute( 

        name: "default_route", 

        template: "{controller}/{action}/{id?}", 

        defaults: new { controller = "Home", action = "Index" } 

    ); 

    (这是我们用来在ASP.NET Core中进行路由的方式。) 

    2.扩展默认路由 

    一旦我们配置了默认路由,我们可能希望通过根据特定需求添加自定义路由来扩展它。为此,我们可以使用该MapRoute()方法添加配置。 

     

    1 

    2 

    3 

    4 

    5 

    6 

    7 

    8 

    9 

    10 

    11 

    12 

    13 

    14 

    app.UseMvc(routes => 

    { 

        //New Route 

        routes.MapRoute( 

           name: "about-route", 

           template: "about", 

           defaults: new { controller = "Home", action = "About" } 

        ); 

      

    routes.MapRoute( 

        name: "default", 

        template: "{controller=Home}/{action=Index}/{id?}"); 

    }); 

    我们添加了一条额外的路线,通过路线授予对主控制器上“关于”操作的访问权限/about。由于默认模式路由仍然存在,因此我们也可以使用常规/home/about路由访问“关于”页面。 

    3.使用属性 

    您还可以使用控制器中的属性和操作来配置路由。 

     

    1 

    2 

    3 

    4 

    5 

    6 

    7 

    8 

    9 

    10 

    11 

    12 

    13 

    14 

    15 

    16 

    [Route("[controller]")] 

    public class AnalyticsController : Controller 

    { 

        [Route("Dashboard")] 

        public IActionResult Index() 

        { 

            return View(); 

        } 

      

        [Route("[action]")] 

        public IActionResult Charts() 

        { 

            return View(); 

        } 

    } 

    在本示例中,我们可以通过以下路径访问控制器操作: 

    • /Analytics/Dashboard 

    • /Analytics/Charts 

    您可以看到这两个标记,[controller][action]指出我们必须引用已声明的控制器和操作名称。在这种情况下,“Analytics”是控制器的名称,“Charts”是动作的名称,因此它是路由的名称。 

    4.构建RESTful路线 

    为了声明一个RESTful控制器,我们需要使用以下路由配置: 

     

    1 

    2 

    3 

    4 

    5 

    6 

    7 

    8 

    9 

    10 

    11 

    12 

    13 

    14 

    15 

    16 

    17 

    [Route("api/[controller]")] 

    public class ValuesController : Controller 

    { 

        // GET api/values 

        [HttpGet] 

        public IEnumerable<string> Get() 

        { 

            return new string[] {"hello", "world!"}; 

        } 

      

        // POST api/values 

        [HttpPost] 

        public void PostCreate([FromBody] string value) 

        { 

        } 

    } 

    在这里,我们告诉我们的RESTful服务接受/api/values路由下的呼叫。请注意,我们不再使用该Route属性进行操作。相反,我们与装饰它HttpGetHttpPostHttpPutHttpDelete的属性。 
    或者,我们可以看看不同的场景: 

     

    1 

    2 

    3 

    4 

    5 

    6 

    // POST api/values/5 

    [HttpPost("{id}")] 

    public void PostUpdate(int id, [FromBody] string value) 

    { 

    } 

    在这里,我们有以下路线的控制器值 

    • HTTP Post/values路线将调用Post()行动 

    • HTTP Post/values/PostName路线将调用Post([FromBody]string value)行动 

    5.使用约束 

    我们可以将使用约束传递给动作的值的类型进行限制。例如,如果我们期望一个参数是一个数字,我们必须将其限制为整数类型。使用大括号在属性中声明约束{id:int} 

     

    1 

    2 

    3 

    4 

    5 

    6 

    [HttpGet("{id:int}")] 

    public string GetById(int id) 

    { 

        return "item " + id; 

    } 

    在这里,我们告诉动作GetByID只接受一个整数参数。向约束添加问号{id:int?}表示该参数是可选的。因此,如果有问号,我们可以打电话/GetByID/123/GetByID不带附加参数。我们也可以这样定义在Startup类中声明的默认路由中的约束: 

     

    1 

    2 

    3 

    4 

    5 

    routes.MapRoute( 

        name: "getProductById", 

        template: "Products/{id:int}", 

        defaults: new { controller = "Products", action = "GetById" }); 

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/Little-Sky/p/10570329.html
Copyright © 2011-2022 走看看