You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET RESTful API添加Azure Health Check代码实现咨询

为ASP.NET Framework RESTful API配置Azure健康检查的实现方案

1. 手动实现健康检查端点

ASP.NET Framework没有内置的健康检查中间件,需自行创建返回标准状态码的端点,供Azure健康检查服务调用:

方式一:API控制器实现

创建HealthController,添加健康检查接口,可按需加入依赖验证逻辑:

public class HealthController : ApiController
{
    [HttpGet]
    [Route("health")]
    public IHttpActionResult GetHealthStatus()
    {
        bool isHealthy = true;

        // 示例:验证数据库连接状态
        try
        {
            using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["YourDbConnection"].ConnectionString))
            {
                conn.Open();
            }
        }
        catch
        {
            isHealthy = false;
        }

        return isHealthy ? Ok("Healthy") : InternalServerError(new Exception("Unhealthy"));
    }
}

方式二:ASHX轻量处理程序

若不想新增控制器,可创建HealthCheck.ashx处理程序:

public class HealthCheck : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        bool isHealthy = true;

        // 可在此添加自定义检查逻辑

        if (isHealthy)
        {
            context.Response.StatusCode = 200;
            context.Response.Write("Healthy");
        }
        else
        {
            context.Response.StatusCode = 503;
            context.Response.Write("Unhealthy");
        }
    }

    public bool IsReusable => false;
}

2. 配置Azure App Service健康检查

端点创建完成后,在Azure门户完成配置:

  • 进入目标App Service资源,打开健康检查选项卡
  • 启用健康检查,设置路径为你创建的端点(如/health或/HealthCheck.ashx)
  • 根据需求调整检查间隔、超时时间等参数,Azure会定期请求该端点,依据返回状态码判断服务健康状态

3. 进阶:多依赖健康检查封装

若需验证多个依赖(数据库、缓存、外部API等),可封装健康检查服务:

public interface IHealthChecker
{
    bool ValidateAllDependencies();
}

public class HealthChecker : IHealthChecker
{
    public bool ValidateAllDependencies()
    {
        var checkResults = new List<bool>
        {
            CheckDatabase(),
            CheckRedisCache(),
            CheckExternalService()
        };

        return checkResults.All(result => result);
    }

    private bool CheckDatabase()
    {
        try
        {
            using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["YourDbConnection"].ConnectionString))
            {
                conn.Open();
                return true;
            }
        }
        catch
        {
            return false;
        }
    }

    private bool CheckRedisCache()
    {
        try
        {
            var redisConn = StackExchange.Redis.ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["RedisConnection"]);
            return redisConn.IsConnected;
        }
        catch
        {
            return false;
        }
    }

    private bool CheckExternalService()
    {
        try
        {
            using (var client = new HttpClient())
            {
                var response = client.GetAsync("https://your-external-service.com/health").Result;
                return response.IsSuccessStatusCode;
            }
        }
        catch
        {
            return false;
        }
    }
}

在健康端点中调用该服务:

public class HealthController : ApiController
{
    private readonly IHealthChecker _healthChecker;

    public HealthController()
    {
        _healthChecker = new HealthChecker(); // 若项目使用DI容器,可通过构造函数注入
    }

    [HttpGet]
    [Route("health")]
    public IHttpActionResult GetHealthStatus()
    {
        bool isHealthy = _healthChecker.ValidateAllDependencies();
        return isHealthy ? Ok("Healthy") : InternalServerError(new Exception("部分依赖服务异常"));
    }
}

4. 注意事项

  • 确保健康检查端点无需身份验证,Azure健康检查服务不会携带认证信息
  • 避免在检查逻辑中执行耗时操作,保证端点响应迅速
  • 可通过Azure门户查看健康检查历史记录与失败日志,用于问题排查

内容的提问来源于stack exchange,提问作者VariableTao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:45:43