<commit_before>---
title: 路由
type: guide
order: 202
enable: true
---

## 路由

CatLib路由系统可以赋予您通过一个uri调度到指定功能的能力。

### 基础概念

#### **基本构成**

CatLib路由系统由`路由器`，`特性路由`，`路由条目`，`路由编译器`，`路由组`组成。

`路由器`负责整个路由系统的调度

`路由条目`是路由系统中的基本单位，她确定了具体的一条路由及路由的目标。

`路由组`则是一个群体范围，一个路由组内部可以有多个路由条目，反之一个路由条目也可以拥有多个路由组。

`特性路由`是路由系统的扩展，允许开发者以特性的形式对路由目标方法进行标记后对标记的路由方法进行调度。

`路由编译器`用于编译路由条目。编译后的路由条目可以被路由器使用。

#### **名词解释**

`调度`一个方法，通过路由的方式调用被路由的方法。

### 使用场景

- (客户端,服务器)通过URI控制客户端切换UI，场景等。
- 允许拦截UI，场景跳转过程，处理客户端埋点等逻辑。
- 跨组件API调用，允许参数传递与解析，并通过控制反转来做组件解耦。
- Debug调试指令控制

### 路由架构图

<img src="../../images/routing-diagram.svg" width="100%"/>

### 初始配置

初始配置必须在框架初始化前完成配置，下面是路由组件需要的初始配置：

| 配置名                            | 是否必须 | 配置描述(可以点击查看详细)                 |
| -------------------------------- |:------:|:--------------------------------------:|
| `RoutingProvider.DefaultScheme`  | 否      | 默认的Scheme
| `RoutingProvider.CompilerAssembly`     | 否      | [路由编译时参与编译的程序集](#路由编译剥离)  |

### 合法的URI

符合下面RFC定义的URI均是合法的URI，都可以被CatLib路由系统解析：

- [RFC1808](https://www.ietf.org/rfc/rfc1808.txt)
- [RFC1738](https://www.ietf.org/rfc/rfc1738.txt)
- [RFC2396](https://www.ietf.org/rfc/rfc2396.txt)
- [RFC2732](https://www.ietf.org/rfc/rfc2732.txt)

### 基础注册

注册一个基本路由只需要一个`url`与一个`lambda`, 如果您没有定义uri的`scheme`那么将会使用默认值:

``` csharp
Router.Instance.Reg("main", (request, response) =>
{<commit_msg>将Router的实现方法写出来先<commit_after>---
title: 路由
type: guide
order: 202
enable: true
---

## 路由

CatLib路由系统可以赋予您通过一个uri调度到指定功能的能力。

### 基础概念

#### **基本构成**

CatLib路由系统由`路由器`，`特性路由`，`路由条目`，`路由编译器`，`路由组`组成。

`路由器`负责整个路由系统的调度

`路由条目`是路由系统中的基本单位，她确定了具体的一条路由及路由的目标。

`路由组`则是一个群体范围，一个路由组内部可以有多个路由条目，反之一个路由条目也可以拥有多个路由组。

`特性路由`是路由系统的扩展，允许开发者以特性的形式对路由目标方法进行标记后对标记的路由方法进行调度。

`路由编译器`用于编译路由条目。编译后的路由条目可以被路由器使用。

#### **名词解释**

`调度`一个方法，通过路由的方式调用被路由的方法。

### 使用场景

- (客户端,服务器)通过URI控制客户端切换UI，场景等。
- 允许拦截UI，场景跳转过程，处理客户端埋点等逻辑。
- 跨组件API调用，允许参数传递与解析，并通过控制反转来做组件解耦。
- Debug调试指令控制

### 路由架构图

<img src="../../images/routing-diagram.svg" width="100%"/>

### 初始配置

初始配置必须在框架初始化前完成配置，下面是路由组件需要的初始配置：

| 配置名                            | 是否必须 | 配置描述(可以点击查看详细)                 |
| -------------------------------- |:------:|:--------------------------------------:|
| `RoutingProvider.DefaultScheme`  | 否      | 默认的Scheme
| `RoutingProvider.CompilerAssembly`     | 否      | [路由编译时参与编译的程序集](#路由编译剥离)  |

### 合法的URI

符合下面RFC定义的URI均是合法的URI，都可以被CatLib路由系统解析：

- [RFC1808](https://www.ietf.org/rfc/rfc1808.txt)
- [RFC1738](https://www.ietf.org/rfc/rfc1738.txt)
- [RFC2396](https://www.ietf.org/rfc/rfc2396.txt)
- [RFC2732](https://www.ietf.org/rfc/rfc2732.txt)

### 基础注册

注册一个基本路由只需要一个`url`与一个`lambda`, 如果您没有定义uri的`scheme`那么将会使用默认值:
``` Router
public sealed class Router : Facade<IRouter> {

}

``` csharp
Router.Instance.Reg("main", (request, response) =>
{
{'fraction_non_alphanumeric': 0.22485632183908047, 'fraction_numerical': 0.027298850574712645, 'mean_word_length': 3.4919354838709675, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 8, 'https://': 8, 'lorem ipsum': 0, 'www.': 8, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '886954', 'n_tokens_mistral': 1807, 'n_tokens_neox': 1971, 'n_words': 114}