This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/apis/poi/web/Startup.cs

104 lines
3.8 KiB
C#
Raw Permalink Normal View History

2022-11-03 20:41:13 +00:00
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Rewrite;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using poi.Data;
namespace poi
{
[ExcludeFromCodeCoverage]
public class Startup
{
public Startup(IConfiguration configuration)
=> Configuration = configuration;
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson((options =>
{
options.SerializerSettings.Formatting = Formatting.Indented;
}));
services.AddHealthChecks()
.AddDbContextCheck<POIContext>()
.AddCheck<Utility.HealthCheck>("poi_health_check");
var connectionString = poi.Utility.POIConfiguration.GetConnectionString(this.Configuration);
services.AddDbContext<POIContext>(options =>
options.UseSqlServer(connectionString));
// Register the Swagger generator, defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("docs", new OpenApiInfo {
Title = "Points Of Interest(POI) API",
Version = "v1",
Description = "API for the POI in the My Driving example app. https://github.com/Azure-Samples/openhack-devops"
});
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, POIContext dbcontext)
{
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseRewriter(new RewriteOptions().AddRedirect("(.*)api/docs/poi$", "$1api/docs/poi/index.html"));
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger(c =>
c.RouteTemplate = "swagger/{documentName}/poi/swagger.json"
);
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/docs/poi/swagger.json", "Points Of Interest(POI) API V1");
c.DocumentTitle = "POI Swagger UI";
c.RoutePrefix = "api/docs/poi";
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHealthChecks("api/healthcheck/poi", new HealthCheckOptions()
{
AllowCachingResponses = false,
ResponseWriter = HealthCheckResponse
});
});
}
private static Task HealthCheckResponse(HttpContext context, HealthReport result)
{
context.Response.ContentType = "application/json";
var json = new JObject(
new JProperty("message", "POI Service Healthcheck"),
new JProperty("status", result.Status.ToString()));
return context.Response.WriteAsync(
json.ToString(Formatting.Indented));
}
}
}