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}");
}
}
}
}