2017-06-22 111 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"); 

調用它。