【NetCore】10-路由定义

文章目录

  • 路由与终结点:如何规划好Web Api
    • 1. 路由
      • 1.1 路由映射
      • 1.2 路由注册方式
      • 1.3 路由约束
      • 总结: Web Api定义

路由与终结点:如何规划好Web Api

1. 路由

1.1 路由映射

路由系统核心作用是指URL和应用程序Controller的对应关系的一种映射
这种映射的作用:

1.把URL映射到对应的Controller的action上
2.根据Controller和action的名字生成URL

1.2 路由注册方式

  • 路由模板的方式 ⇒ 传统方式,可作为MVC页面的Web配置
  • RouteAttribute方式 ⇒ 更适合Web Api

1.3 路由约束

路由约束指的是路由如何匹配

  • 类型约束
  • 范围约束
  • 正则约束
  • 是否必选
  • 自定义IRouteConstraint

根据路由信息URL生成地址的类

  • LinkGenerator
  • IUrlHelper
		/// 
        /// 类型约束
        /// 
        /// 必须可以转long
        /// 
        [HttpGet("{id:MyRouteConstraint}")]
        public bool OrderExist(object id)
        {
            return true;
        }

        /// 
        /// 范围约束
        /// 
        /// 
        /// 
        [HttpGet("{id:max(20)}")]
        public bool Max(long id)
        {
            return true;
        }

        /// 
        /// 是否必选
        /// 
        /// 
        /// 
        [HttpGet("{name:required}")]
        public bool Reque(string name)
        {
            return true;
        }

        /// 
        /// 正则约束
        /// 
        /// 
        /// 
        [HttpGet("{number:regex(^\\d{{3}}$)}")]
        public bool Bumber(string number)
        {

            return true;
        }

// 自定义IRouteConstraint
// 自定义路由约束类
public class MyRouteConstraint : IRouteConstraint
{
    public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
     {
         if (RouteDirection.IncomingRequest == routeDirection)
         {
             var v= values[routeKey];
             if (long.TryParse(v.ToString(),out var value))
             {
                 return true;
             }
         }
         return false;
     }
 }

// startup中ConfigureServices
services.AddRouting(options =>
{
    options.ConstraintMap.Add("MyRouteConstraint", typeof(MyRouteConstraint));
});


[HttpGet("{id:MyRouteConstraint}")]
public bool OrderExist([FromRoute]string id)
{
    return true;
}

LinkGenerator生成Url

[HttpGet("{id:max(20)}")]
public bool Max([FromRoute] long id, [FromServices] LinkGenerator linkGenerator)
{
      var a = linkGenerator.GetPathByAction(HttpContext,
          action: "Reque",
          controller: "Order",
          values: new { name = "abc" });

      var uri = linkGenerator.GetUriByAction(HttpContext,
          action: "Reque",
          controller: "Order",
          values: new { name = "abc" });
      return true;

  }

总结: Web Api定义

  • Restful不是必须的
  • 约定好API的表达契约
  • 将API约束在特定目录下,如/api/
  • 使用ObsoleteAttribute标记即将废弃的API

你可能感兴趣的:(NetCore,.netcore,后端,开发语言)