Old prpgram style
using System;
using System.Net.Mime;
using System.Threading;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace NameSpace
{
///
/// Main Program
///
public class Program
{
///
/// Main Loop Program
///
///
public static void Main(string[] args)
{
//start an threaded app loop
//ThreadPool.QueueUserWorkItem(Core.CoreRun.Run, args);
CreateHostBuilder(args).Build().Run();
}
///
/// Start Kestrel Webservice
///
///
///
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(
webBuilder =>
{
//configure server to accept all interfaces - and not only localhost ;)
webBuilder.UseUrls("http://*:5000", "https://*:5001", "http://0.0.0.0:5000",
"https://0.0.0.0:5001");
webBuilder.UseStartup();
});
}
}
using System;
using System.IO;
using System.Reflection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
namespace NameSpace
{
///
/// Startup Webservice and configure the Kestrel
///
public class Startup
{
///
/// Kestrel configuration
///
// ReSharper disable once MemberCanBePrivate.Global
// ReSharper disable once UnusedAutoPropertyAccessor.Global
public IConfiguration Configuration { get; }
// ReSharper disable once CommentTypo
///
/// OwnConfiguration-Section im JSON-Configuration (appsettings.json)
///
// ReSharper disable once MemberCanBePrivate.Global
public static OwnConfiguration OwnConfiguration { get; set; }
///
/// ctor
///
///
public Startup(IConfiguration configuration)
{
Configuration = configuration;
OwnConfiguration = Configuration.GetSection("OwnConfiguration").Get();
}
///
/// This method gets called by the runtime. Use this method to add services to the container.
///
///
// ReSharper disable once CA1822
public void ConfigureServices(IServiceCollection services)
{
//provide the MVC Pattern to generate Views from Views//.cshtml
//see: Views/Setup/Index.cshtml
services.AddControllersWithViews(options =>
{
//add singleton SetupActionFilter
//init logger for SetupActionFilter and register to global logging system (console)
var loggerFactory = LoggerFactory.Create(builder =>
{
builder
.AddConsole();
//.AddEventLog();
});
ILogger logger = loggerFactory.CreateLogger();
//options.Filters.Add(new SetupActionFilter(OwnConfiguration, new Logger(new LoggerFactory())));
options.Filters.Add(new SetupActionFilter(OwnConfiguration, logger));
//Every request has own instance from SetupActionFilter
//options.Filters.Add(typeof(SetupActionFilter));
});
//todo: AddHealthChecks
//services.AddHealthChecks()
//add swagger service
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {Title = "APP", Version = "v1"});
// Set the comments path for the Swagger JSON and UI.
//generate documentation for swagger-UI from the Code-XML-Documentation /// <...>
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
services.AddMvc();
}
///
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
///
///
///
public void Configure(IApplicationBuilder app, IWebHostEnvironment env )//, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "APP v1"));
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}