Files
rmutr_report/Startup.cs
kamonwan taengsuk 19609b38e4 add graph report
2022-11-17 15:42:46 +07:00

109 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using rmutr_report.Models;
namespace rmutr_report
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
var _setting = new Setting()
{
report_path = Configuration["Settings:ReportPath"]
};
services.AddSingleton(_setting);
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("reports", new OpenApiInfo {Title = "Reports API", Version = "v1"});
c.SwaggerDoc("graph", new OpenApiInfo {Title = "Graph API", Version = "v1"});
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
c.EnableAnnotations();
// c.MapType(typeof(TimeSpan?), () => new OpenApiSchema
// {
// Type = "string",
// Example = new OpenApiString("09:30:00")
// });
});
services.AddCors(options =>
{
options.AddPolicy(name: "AllowAllOrigins",
builder =>
{
builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
});
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
KnownNetworks =
{
new IPNetwork(IPAddress.Any, 0)
}
});
app.UseSwagger(c => {
c.RouteTemplate = "swagger/{documentName}/swagger.json";
c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
{
if (!httpReq.Headers.ContainsKey("X-Forwarded-Host")) return;
var serverUrl = $"{httpReq.Headers["X-Scheme"]}://" +
$"{httpReq.Headers["X-Forwarded-Host"]}" +
$"{httpReq.Headers["X-Forwarded-Prefix"]}";
swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer { Url =serverUrl}};// $"{httpReq.Scheme}://{httpReq.Host.Value}{swaggerBasePath}" } };
});
});
//Swagger interface
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("reports/swagger.json", "Reports API v1");
c.SwaggerEndpoint("graph/swagger.json", "Graph API v1");
c.DefaultModelExpandDepth(0);
c.DefaultModelsExpandDepth(-1);
});
app.UseRouting();
app.UseAuthorization();
app.UseCors("AllowAllOrigins");
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
}