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

  • 相关阅读:
    发送邮件封装的方法
    异步编程
    Xaml中string(字符串)常量的定义以及空格的处理
    python中lxml的应用
    Python打包成exe
    利用TaskScheduler处理Queue、Stack等类型的操作队列(生产者消费者场景)
    TreeView的性能问题
    WPF中ItemsControl绑定到Google ProtocolBuffer的结构体时的性能问题
    WPF中ToolTip的自定义
    WPF中ItemsControl绑定到Google ProtocolBuffer的结构体时的性能问题
  • 原文地址:https://www.cnblogs.com/Little-Sky/p/10570329.html
Copyright © 2011-2022 走看看