using System.IO; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; namespace server.Controllers; /// /// 教程 API /// [ApiController] [Route("api/[controller]")] public class TutorialController : ControllerBase { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private readonly IWebHostEnvironment _environment; public TutorialController(IWebHostEnvironment environment) { _environment = environment; } /// /// 获取所有可用的教程目录 /// /// 教程目录列表 [HttpGet] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public IActionResult GetTutorials() { try { // 获取文档目录 string docPath = Path.Combine(_environment.WebRootPath, "doc"); if (!Directory.Exists(docPath)) { return Ok(new { tutorials = new List() }); } // 获取所有子目录 var directories = Directory.GetDirectories(docPath) .Select(Path.GetFileName) .Where(dir => !string.IsNullOrEmpty(dir)) .ToList(); return Ok(new { tutorials = directories }); } catch (Exception ex) { logger.Error(ex, "获取教程目录失败"); return StatusCode(500, new { error = "无法读取教程目录" }); } } }