121 lines
3.3 KiB
Markdown
121 lines
3.3 KiB
Markdown
[返回](./Runtime-README.md)
|
||
|
||
# /Convention/Runtime/Web
|
||
|
||
---
|
||
|
||
网络工具模块,提供HTTP客户端和URL操作功能
|
||
|
||
## ToolURL类
|
||
|
||
### 构造与基本信息
|
||
- `ToolURL(string url)` 从URL字符串创建对象
|
||
- `ToString()` / `GetFullURL()` / `FullURL` 获取完整URL
|
||
- `implicit operator string` 隐式字符串转换
|
||
|
||
### URL属性解析
|
||
- `GetFilename()` 获取URL中的文件名
|
||
- `GetExtension()` 获取文件扩展名
|
||
- `ExtensionIs(params string[] extensions)` 检查扩展名是否匹配
|
||
|
||
### URL验证
|
||
- `IsValid` 属性,检查URL是否有效
|
||
- `ValidateURL()` 验证URL格式
|
||
- `implicit operator bool` 隐式布尔转换,等同于IsValid
|
||
|
||
支持HTTP和HTTPS协议的绝对URL
|
||
|
||
### HTTP方法
|
||
|
||
#### GET请求
|
||
- `GetAsync(Action<HttpResponseMessage> callback)` 异步GET
|
||
- `Get(Action<HttpResponseMessage> callback)` 同步GET
|
||
|
||
#### POST请求
|
||
- `PostAsync(Action<HttpResponseMessage> callback, Dictionary<string, string> formData = null)` 异步POST
|
||
- `Post(Action<HttpResponseMessage> callback, Dictionary<string, string> formData = null)` 同步POST
|
||
|
||
支持表单数据提交
|
||
|
||
### 内容加载
|
||
|
||
#### 文本加载
|
||
- `LoadAsTextAsync()` 异步加载为文本
|
||
- `LoadAsText()` 同步加载为文本
|
||
|
||
#### 二进制加载
|
||
- `LoadAsBinaryAsync()` 异步加载为字节数组
|
||
- `LoadAsBinary()` 同步加载为字节数组
|
||
|
||
#### JSON加载
|
||
- `LoadAsJson<T>()` 同步加载并反序列化JSON
|
||
- `LoadAsJsonAsync<T>()` 异步加载并反序列化JSON
|
||
|
||
### 文件保存
|
||
- `Save(string localPath = null)` 自动选择格式保存到本地
|
||
- `SaveAsText(string localPath = null)` 保存为文本文件
|
||
- `SaveAsJson(string localPath = null)` 保存为JSON文件
|
||
- `SaveAsBinary(string localPath = null)` 保存为二进制文件
|
||
|
||
### 文件类型判断
|
||
- `IsText` 是否为文本文件(txt, html, htm, css, js, xml, csv)
|
||
- `IsJson` 是否为JSON文件
|
||
- `IsImage` 是否为图像文件(jpg, jpeg, png, gif, bmp, svg)
|
||
- `IsDocument` 是否为文档文件(pdf, doc, docx, xls, xlsx, ppt, pptx)
|
||
|
||
### 高级操作
|
||
- `Open(string url)` 在当前对象上打开新URL
|
||
- `DownloadAsync(string localPath = null)` 异步下载文件
|
||
- `Download(string localPath = null)` 同步下载文件
|
||
|
||
## 设计特点
|
||
|
||
### 统一的HTTP客户端
|
||
使用静态 `HttpClient` 实例,避免连接池耗尽
|
||
|
||
### 自动内容类型检测
|
||
基于文件扩展名自动判断内容类型,优化保存和处理策略
|
||
|
||
### 异步支持
|
||
所有网络操作都提供异步和同步两种版本
|
||
|
||
### 错误处理
|
||
网络请求失败时回调函数接收null参数,方法返回false
|
||
|
||
### 文件管理集成
|
||
下载的文件自动转换为ToolFile对象,与文件系统模块无缝集成
|
||
|
||
### 灵活的数据格式
|
||
支持文本、二进制、JSON等多种数据格式的加载和保存
|
||
|
||
## 使用示例
|
||
|
||
### 基本HTTP请求
|
||
```csharp
|
||
var url = new ToolURL("https://api.example.com/data");
|
||
if (url.IsValid)
|
||
{
|
||
url.Get(response => {
|
||
if (response != null && response.IsSuccessStatusCode)
|
||
{
|
||
// 处理响应
|
||
}
|
||
});
|
||
}
|
||
```
|
||
|
||
### 文件下载
|
||
```csharp
|
||
var url = new ToolURL("https://example.com/file.json");
|
||
var localFile = url.Download("./downloads/file.json");
|
||
if (localFile.Exists())
|
||
{
|
||
var data = localFile.LoadAsJson<MyDataType>();
|
||
}
|
||
```
|
||
|
||
### 类型安全的JSON加载
|
||
```csharp
|
||
var url = new ToolURL("https://api.example.com/users.json");
|
||
var users = url.LoadAsJson<List<User>>();
|
||
``` |