using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace DockerStudyApi.Controllers
{
///
/// 配置测试控制器
///
[Route("api/[controller]/[action]")]
[ApiController]
public class DemoController : ControllerBase
{
private readonly ILogger _logger;
private readonly IOptions _tespOption;
private readonly IOptionsMonitor _monitorTestOption;
private readonly IOptionsMonitorCache _monitorCacheTestOption;
private readonly IOptionsSnapshot _snapshotTestOption;
private readonly IConfiguration _configuration;
public DemoController
(
ILogger logger,
IOptions tespOption,
IOptionsMonitor monitorTestOption,
IOptionsMonitorCache monitorCacheTestOption,
IOptionsSnapshot snapshotTestOption,
IConfiguration configuration
)
{
_logger = logger;
_tespOption = tespOption;
_monitorTestOption = monitorTestOption;
_monitorCacheTestOption = monitorCacheTestOption;
_snapshotTestOption = snapshotTestOption;
_configuration = configuration;
}
///
/// 服务测试
///
[HttpGet]
public IActionResult Ping()
{
return Ok();
}
///
/// 说明:泛型左右尖括号,不能写在注释里,会生成无效的xml
/// 解决:用[]或{}或中文符号<> 代替,或者使用xml转义字符 <>
/// 获取 IOptions<TestOption>
///
[HttpGet]
public TestOption TestOption()
{
return _tespOption.Value;
}
///
/// 获取 IOptionsMonitor<TestOptionT>
///
[HttpGet]
public TestOption MonitorTestOption()
{
_monitorTestOption.OnChange(_ => _logger.LogWarning(_monitorTestOption.CurrentValue.AppId));
return _monitorTestOption.CurrentValue;
}
///
/// 获取 IOptionsMonitorCache<TestOption>
///
[HttpGet]
public TestOption MonitorCacheTestOption()
{
return _monitorCacheTestOption.GetOrAdd("demo",()=> new TestOption());
}
///
/// 获取 IOptionsSnapshot<TestOption>
///
[HttpGet]
public TestOption SnapshotTestOption()
{
return _snapshotTestOption.Value;
}
///
/// 获取命令参数
/// (仅支持字符串或Key=value两种形式)
///
[HttpGet]
public IActionResult CmdPara(string cmdName)
{
var cmdArgs = System.Environment.GetCommandLineArgs();
if (cmdArgs == null)
{
return Ok("启动时没有设置:命令行参数");
}
var kvArgs = new Dictionary();
var singleArgs= new List();
foreach (var arg in cmdArgs)
{
var item = arg.Split('=').ToList();
if (item.Count ==1)
{
singleArgs.Add(item[0]);
}
if (item.Count == 2)
{
kvArgs.Add(item[0], item[1]);
}
}
var result =string.Empty;
var kvArg = kvArgs.FirstOrDefault(q=>q.Key == cmdName);
if (kvArg.Key == cmdName)
{
result = kvArg.Value;
return Ok($"{cmdName} 命令参数值为:{kvArg.Value} ");
}
var singleArg = singleArgs.FirstOrDefault(q=> q == cmdName);
return Ok(singleArg ?? $"无 {cmdName} 命令参数 ");
}
///
/// 获取环境变量
///
[HttpGet]
public IActionResult Evn(string envName)
{
var envValue = System.Environment.GetEnvironmentVariable(envName);
return Ok(envValue??"无此环境变量");
}
///
/// 获取配置项
///
[HttpGet]
public IActionResult ConfigItem(string itemName)
{
var envValue = _configuration.GetValue(itemName);
return Ok(envValue ?? "无此配置变量");
}
///
/// 获取所有配置项
///
[HttpGet]
public IActionResult Info()
{
var cnfigText = Newtonsoft.Json.JsonConvert.SerializeObject(_configuration.GetChildren());
return Ok(cnfigText);
}
}
}