【NetCore】10-路由定义

news/2024/5/19 23:24:35 标签: .netcore, 后端, 开发语言

文章目录

  • 路由与终结点:如何规划好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
		/// <summary>
        /// 类型约束
        /// </summary>
        /// <param name="id">必须可以转long</param>
        /// <returns></returns>
        [HttpGet("{id:MyRouteConstraint}")]
        public bool OrderExist(object id)
        {
            return true;
        }

        /// <summary>
        /// 范围约束
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("{id:max(20)}")]
        public bool Max(long id)
        {
            return true;
        }

        /// <summary>
        /// 是否必选
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        [HttpGet("{name:required}")]
        public bool Reque(string name)
        {
            return true;
        }

        /// <summary>
        /// 正则约束
        /// </summary>
        /// <param name="number"></param>
        /// <returns></returns>
        [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

http://www.niftyadmin.cn/n/4942101.html

相关文章

数据结构--最短路径 Floyd算法

数据结构–最短路径 Floyd算法 F l o y d 算法&#xff1a;求出每⼀对顶点之间的最短路径 \color{red}Floyd算法&#xff1a;求出每⼀对顶点之间的最短路径 Floyd算法&#xff1a;求出每⼀对顶点之间的最短路径 使⽤动态规划思想&#xff0c;将问题的求解分为多个阶段 对于n个顶…

Python找出列表中出现次数最多的元素三种方式

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 方式一&#xff1a; 原理&#xff1a;创建一个新的空字典&#xff0c;用循环的方式来获取列表中的每一个元素&#xff0c;判断获取的元素是否存在字典中的key&#xff0c;如果不存在的话&#xff0c;将元素作为key&#xf…

一维离散动力系统计算的基本理论

离散动力系统计算的基本理论 离散动力系统的基本概念与基本定理 离散动力系统的定义 形如 的迭代系统称为一个一阶离散动力系统。其中一阶指显式的仅依赖前一项类似得&#xff0c;我们可以定义m-阶离散动力系统 和更高维度的动力系统 不动点 不动点 周期轨道 周期与不变集 …

linux中的/dev/null

1.什么是/dev 在 Linux 上&#xff0c;从驱动程序到设备的所有内容都可以作为文件进行访问。/dev/ 是包含所有物理和虚拟设备的目录。例如&#xff0c;/dev/sda 可能是您的主硬盘驱动器&#xff0c;/dev/sdb 可能是您现在正在使用的笔记本驱动器的文件。这就是您在 Linux 中访问…

在 React+Typescript 项目环境中创建并使用组件

上文 ReactTypescript清理项目环境 我们将自己创建的项目环境 好好清理了一下 下面 我们来看组件的创建 组件化在这种数据响应式开发中肯定是非常重要的。 我们现在src下创建一个文件夹 叫 components 就用他专门来处理组件业务 然后 我们在下面创建一个 hello.tsx 注意 是t…

安装部署docker以及基本的操作

目录 一.安装与部署docker 1.1 关闭防火墙 1.2 安装依赖包 1.3 设置阿里云镜像源 1.4安装docker-ce社区版 二.设置镜像加速 三.网络优化 四.docker镜像操作 4.1 搜索镜像——docker search 镜像 4.2 下载镜像——docker pull 仓库名/镜像名&#xff1a;标签 4.3 查看已下载…

OpenCV-Python中的图像处理-傅里叶变换

OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…

UDP 的报文结构以及注意事项

UDP协议 1.UDP协议端格式 1.图中的16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度 2.若校验和出错,会直接丢弃 2.UDP的报文结构 UDP报文主体分为两个部分:UDP报头(占8个字节)UDP载荷/UDP数据 1.源端口号 16位,2个字节 2.目的端口号 16位,2个字节 3.包长度 指示了…