using HotelPms.GrpcService; using HotelPms.GrpcService.Hubs; using HotelPms.GrpcService.Services; using HotelPms.GrpcService.Util; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.ResponseCompression; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.IdentityModel.Tokens; using System.Text; //AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.DisableHttp2AltSvcHandshake", true); var builder = WebApplication.CreateBuilder(args); Setting.Init(builder.Configuration); //if (Setting.HttpPort > 0) { builder.WebHost.UseUrls($"http://*:{Setting.HttpPort}"); } if (Setting.GrpcPort > 0 || Setting.ApiPort > 0) { builder.Services.Configure(y => { if (Setting.GrpcPort > 0) { y.ListenAnyIP(Setting.GrpcPort, o => { //o.Protocols = HttpProtocols.Http2; //o.DisableAltSvcHeader = true; o.Protocols = HttpProtocols.Http1AndHttp2; //nginx要使用Http2、必须让Kestrel能够上https,就是tls,必须做个证书 //o.Protocols = HttpProtocols.Http2; //o.UseHttps("./certs/backend.pfx", "password1"); //o.UseHttps("/etc/letsencrypt/live/ginbow.eu.org/certificate.pfx","Go_k@2087"); // 使用 Let’s Encrypt 证书 //o.Protocols = HttpProtocols.Http2; // 强制使用 HTTP/2 }); } if (Setting.ApiPort > 0) { y.ListenAnyIP(Setting.ApiPort, o => { //o.Protocols = HttpProtocols.Http2; //o.DisableAltSvcHeader = true; //o.UseHttps("/etc/letsencrypt/live/ginbow.eu.org/certificate.pfx", "Go_k@2087"); // 使用 Let’s Encrypt 证书 o.Protocols = HttpProtocols.Http1AndHttp2; //o.UseHttps(cert); // 使用 Let’s Encrypt 证书 //o.Protocols = HttpProtocols.Http2; // 强制使用 HTTP/2 }); } }); } builder.Services.AddGrpc(options => { options.MaxReceiveMessageSize = int.MaxValue; }); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ClockSkew = TimeSpan.Zero, ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Setting.JwtIssuer, ValidAudience = Setting.JwtAudience, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Setting.JwtSecurityKey)) }; options.Events = new JwtBearerEvents { //認証エラー OnChallenge = async context => { context.HandleResponse(); context.Response.ContentType = "application/json;charset=utf-8"; context.Response.StatusCode = StatusCodes.Status401Unauthorized; await context.Response.WriteAsync("{\"message\":\"Unauthorized\",\"success\":false}"); }, //OnMessageReceived = async context => //{ // context.Token = context.Request.Query["token"]; // await Task.CompletedTask; //} }; }); builder.Services.AddControllers(); builder.Services.AddResponseCompression(opts => { opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "application/octet-stream" }); }); builder.Services.AddCors(o => o.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding"); })); builder.Services.AddSignalR(config => { if (builder.Environment.IsDevelopment()) { config.EnableDetailedErrors = true; } }) .AddMessagePackProtocol(); // app初期化 var app = builder.Build(); app.Logger.Log(LogLevel.Information, $"Setting.HotelPmsDB = {Setting.HotelPmsDB}"); app.Logger.Log(LogLevel.Information, $"Setting.HotelCommonDB = {Setting.HotelCommonDB}"); app.Logger.Log(LogLevel.Information, $"Setting.SystemCenterDB = {Setting.SystemCenterDB}"); app.UseResponseCompression(); if (builder.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); //app.UseBlazorFrameworkFiles(); //app.UseStaticFiles(); app.UseRouting(); app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true }); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers().RequireCors("AllowAll"); //Rest API app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); app.MapGrpcService().RequireCors("AllowAll"); //app.UseEndpoints(endpoints => //{ // endpoints.MapGrpcService(); // endpoints.MapGrpcService(); //}); app.MapGet("/", () => "。。。"); app.MapHub("/notifyhub").RequireCors("AllowAll"); app.Run();