using System.Collections.Concurrent; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace HttpClientStudy.WebApp.Controllers { /// /// Polly V8 控制器 /// [Route("api/[controller]/[action]")] [ApiController] public class Polly8Controller : ControllerBase { private static ConcurrentDictionary ToggleExceptionCache = new ConcurrentDictionary(); private readonly ILogger _logger; /// /// 构造 /// /// 日志 public Polly8Controller(ILogger logger) { _logger = logger; } /// /// Polly8Hello /// /// [HttpGet] public ActionResult Hello() { return Ok("Polly v8"); } /// /// 异常接口 /// /// [HttpGet] public ActionResult Exception() { throw new HttpRequestException("服务器异常"); } /// /// 重试策略异常 /// /// [HttpGet] public ActionResult RetryException() { throw new HttpRequestException("服务器异常"); } /// /// 随机异常 /// /// [HttpGet] public ActionResult RandomException() { var num = Random.Shared.Next(1, 100); if (num >= 50) { throw new HttpRequestException("服务器随机异常"); } else { return Ok(num); } } /// /// 切换异常 /// /// [HttpGet] public ActionResult ToggleException(string toggleId = "") { var toggle = ToggleExceptionCache.GetOrAdd(toggleId, true); //保存切换 ToggleExceptionCache[toggleId] = !toggle; if (toggle) { throw new HttpRequestException("服务器随机异常"); } else { return Ok($"ToggleException toggleId={toggleId}"); } } } }