2017-06-22 221 views
1

我们希望在我们的.NET的核心API规范健康检查,我们认为一个简单的方法是安装一个NuGet包包含的东西,我们可能会在启动文件中添加像这样。添加健康检查中Startup.Configure

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     app.UseHealthCheck(env.EnvironmentName, env.ApplicationName, "/myHealthCheckUrl"); 

     // And all the rest of the app.UseSomethings. 
    } 

现在,如果有人打myapp.com/myHealthCheckUrl,他们将得到一个消息,说像myAppName is alive in myEnvironmentName.

我甚至不知道正确的术语来使用谷歌的答案。我们将如何去做这件事? Swashbuckle确实是something similar with UseSwaggerUi,但是这称为app.UseFileServer并提供了修改后的HTML页面。这是处理它的方式,还是有更轻量级的选择?同样,我们希望这对每个API的其余部分影响最小,所以我们试图避免应用程序本身的控制器操作。

+0

它看起来像我想要的是这个页面上定义的某种中间件? https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware – Micteu

+1

窥视[Microsoft.Extensions.HealthChecks](https://github.com/dotnet-architecture/eShopOnContainers/tree/master/ SRC/BuildingBlocks /健康检查/ src目录/ Microsoft.Extensions.HealthChecks)如果你发现它的东西,做多,你需要,你可以实现自己的简单的中间件,使用代码教程。 – Set

+1

你可以用简单的[健康检查的中间件(https://github.com/schwamster/health-check-middleware)软件包。 –

回答

1

正如在问题的评论中所指出的,我们正在寻找的是提供一个Middleware。最简单的方法是将这段代码添加到Configure方法中,这就是我们决定采用的方法。

app.Map("/HealthCheck", a => 
{ 
    a.Run(async context => 
    { 
     await context.Response.WriteAsync($"{env.ApplicationName} is alive in {env.EnvironmentName}"); 
    }); 
}); 

由于特异性不回答创建方式的NuGet包要做到这一点,这里的问题是,你会怎么做它在扩展类。

public static class ApplicationBuilderExtensions 
{ 
    /// <summary> 
    /// Gives a happy little response when someone makes a request to healthCheckUrl 
    /// </summary> 
    public static IApplicationBuilder UseHealthCheck(this IApplicationBuilder app, string environmentName, string applicationName, string healthCheckUrl) 
    { 
     app.Map(healthCheckUrl, a => 
     { 
      a.Run(async context => 
      { 
       await context.Response.WriteAsync($"{applicationName} is alive in environmentName"); 
      }); 
     }); 
     return app; 
    } 
} 

然后在Startup.Configure

app.UseHealthCheck(env.EnvironmentName, env.ApplicationName, "/myHealthCheckUrl"); 

调用它。