Files
DRS9.Dashboard/src/DRS9.Dashboard.Server/Controllers/RotatorViewerController.cs

87 lines
2.8 KiB
C#
Raw Normal View History

2026-01-13 17:57:48 +08:00
using DRS9.Dashboard.Application.DTOs;
using DRS9.Dashboard.Application.Services;
using Microsoft.AspNetCore.Mvc;
namespace DRS9.Dashboard.Server.Controllers;
/// <summary>
/// 轮播显示控制器 - 供设备客户端使用
/// </summary>
[Route("rotator")]
public class RotatorViewerController : Controller
{
private readonly RotatorItemService _rotatorItemService;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILogger<RotatorViewerController> _logger;
public RotatorViewerController(
RotatorItemService rotatorItemService,
IHttpContextAccessor httpContextAccessor,
ILogger<RotatorViewerController> logger)
{
_rotatorItemService = rotatorItemService;
_httpContextAccessor = httpContextAccessor;
_logger = logger;
}
/// <summary>
/// 获取指定应用的轮播配置 (JSON)
/// </summary>
[HttpGet("{applicationId}/config.json")]
public async Task<ActionResult> GetConfig(int applicationId)
{
try
{
var items = await _rotatorItemService.GetByApplicationIdAsync(applicationId);
// 只返回启用的项目
var enabledItems = items.Where(i => i.IsEnabled).OrderBy(i => i.Order).ToList();
var config = new
{
urls = enabledItems.Select(i => GetAbsoluteUrl(i.Url)).ToList(),
switchIntervals = enabledItems.Select(i => i.Duration).ToList()
};
return Json(config);
}
catch (Exception ex)
{
_logger.LogError(ex, "获取轮播配置失败: ApplicationId={ApplicationId}", applicationId);
return Json(new { urls = new List<string>(), switchIntervals = new List<int>() });
}
}
/// <summary>
/// 显示轮播页面
/// </summary>
[HttpGet("{applicationId}")]
public IActionResult ViewRotator(int applicationId)
{
return View(applicationId);
}
private string GetAbsoluteUrl(string relativeOrAbsoluteUrl)
{
if (string.IsNullOrWhiteSpace(relativeOrAbsoluteUrl))
return string.Empty;
// 如果已经是绝对 URL直接返回
if (relativeOrAbsoluteUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
relativeOrAbsoluteUrl.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
return relativeOrAbsoluteUrl;
}
// 转换为绝对 URL
var request = _httpContextAccessor.HttpContext?.Request;
if (request != null)
{
var baseUrl = $"{request.Scheme}://{request.Host}";
return relativeOrAbsoluteUrl.StartsWith("/") ? baseUrl + relativeOrAbsoluteUrl : baseUrl + "/" + relativeOrAbsoluteUrl;
}
return relativeOrAbsoluteUrl;
}
}