禅道 Zentao 基于禅道 REST API v1,实现 ITicketService 统一接口。
包信息
| 项 | 值 |
|---|---|
| NuGet 包 | Bitzsoft.Integrations.Ticketing.Zentao |
| 实现接口 | ITicketService |
| Provider ID | zentao |
| 鉴权方式 | Session Token(用户名/密码或 Access Token 换取 token,以 Token {session} 头访问业务接口) |
| 默认 BaseUrl | 无(需配置,形如 http://zentao.example.com/api.php/v1) |
| 区域 | CN |
本包内置 token 换取与刷新流程。当配置了 AccessToken 时跳过换 Token 流程,直接以 Access Token 鉴权。
配置字段
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
UserName | string | 是 | — | 禅道登录用户名 |
Password | string | 是 | — | 禅道登录密码(明文,用于换取 Session Token) |
AccessToken | string? | 否 | — | Access Token(提供时跳过 /tokens 换取流程直接鉴权) |
BaseUrl | string | 是 | — | 禅道 API 基地址,形如 http://zentao.example.com/api.php/v1 |
HttpClientName | string | 否 | TicketingZentao | 业务 HttpClient 命名 |
TokenHttpClientName | string | 否 | TicketingZentaoToken | 令牌刷新专用 HttpClient 命名 |
配置 JSON 示例
{ "Ticketing": { "Zentao": { "UserName": "admin", "Password": "your-password", "BaseUrl": "http://zentao.example.com/api.php/v1" } }}DI 注册
// 从配置节注册(默认节名 Ticketing:Zentao)services.AddZentaoTicket(configuration);
// 或用回调单独配置services.AddZentaoTicket(options =>{ options.UserName = "admin"; options.Password = "your-password"; options.BaseUrl = "http://zentao.example.com/api.php/v1";});使用示例
public class BugService{ private readonly ITicketService _ticket;
public BugService(ITicketService ticket) => _ticket = ticket;
public Task<TicketInfo> CreateBugAsync(string title, string description) => _ticket.CreateTicketAsync(new CreateTicketRequest { Subject = title, Description = description });
public Task<TicketingResult> AssignAsync(string bugId, string assigneeId) => _ticket.AssignTicketAsync(bugId, assigneeId);}依赖
| 包 | 说明 |
|---|---|
Bitzsoft.Integrations.Ticketing | 工单系统服务抽象层 |
Bitzsoft.Integrations.Core | 公共基座 |
已知限制
- Session Token 有效期有限,本包通过独立的 token HttpClient 自动刷新;若已持有 Access Token 填入可跳过换取流程。