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<KestrelServerOptions>(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<FileService>().RequireCors("AllowAll");
|
app.MapGrpcService<GrpcSetService>().RequireCors("AllowAll");
|
app.MapGrpcService<GrpcTableService>().RequireCors("AllowAll");
|
app.MapGrpcService<GreeterService>().RequireCors("AllowAll");
|
app.MapGrpcService<UseService>().RequireCors("AllowAll");
|
app.MapGrpcService<UseDetailService>().RequireCors("AllowAll");
|
app.MapGrpcService<UsePersonService>().RequireCors("AllowAll");
|
app.MapGrpcService<UseAlloService>().RequireCors("AllowAll");
|
app.MapGrpcService<UseRoomService>().RequireCors("AllowAll");
|
app.MapGrpcService<ArrangeService>().RequireCors("AllowAll");
|
app.MapGrpcService<PayService>().RequireCors("AllowAll");
|
app.MapGrpcService<PayDivService>().RequireCors("AllowAll");
|
app.MapGrpcService<ReceiptService>().RequireCors("AllowAll");
|
app.MapGrpcService<RentalService>().RequireCors("AllowAll");
|
app.MapGrpcService<SaleService>().RequireCors("AllowAll");
|
app.MapGrpcService<SaleDivService>().RequireCors("AllowAll");
|
app.MapGrpcService<UseFreeService>().RequireCors("AllowAll");
|
app.MapGrpcService<UseMemoService>().RequireCors("AllowAll");
|
app.MapGrpcService<UsePersonFreeService>().RequireCors("AllowAll");
|
app.MapGrpcService<UsePersonTelService>().RequireCors("AllowAll");
|
app.MapGrpcService<HotelService>().RequireCors("AllowAll");
|
app.MapGrpcService<DemoService>().RequireCors("AllowAll");
|
app.MapGrpcService<BuildingService>().RequireCors("AllowAll");
|
app.MapGrpcService<OutputItemService>().RequireCors("AllowAll");
|
app.MapGrpcService<OutputService>().RequireCors("AllowAll");
|
app.MapGrpcService<RoomViewTabService>().RequireCors("AllowAll");
|
app.MapGrpcService<RoomViewLayoutService>().RequireCors("AllowAll");
|
app.MapGrpcService<RoomCellService>().RequireCors("AllowAll");
|
app.MapGrpcService<OptionService>().RequireCors("AllowAll");
|
app.MapGrpcService<RoomStatusService>().RequireCors("AllowAll");
|
app.MapGrpcService<RoomTypeService>().RequireCors("AllowAll");
|
app.MapGrpcService<ItemService>().RequireCors("AllowAll");
|
//app.UseEndpoints(endpoints =>
|
//{
|
// endpoints.MapGrpcService<GreeterService>();
|
// endpoints.MapGrpcService<UseService>();
|
//});
|
app.MapGet("/", () => "。。。");
|
app.MapHub<NotifyHub>("/notifyhub").RequireCors("AllowAll");
|
|
app.Run();
|