12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using FastGithub.Configuration;
- using FastGithub.FlowAnalyze;
- using FastGithub.HttpServer;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Http;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Options;
- using System;
- namespace FastGithub
- {
- /// <summary>
- /// 启动项
- /// </summary>
- public class Startup
- {
- public IConfiguration Configuration { get; }
- /// <summary>
- /// 启动项
- /// </summary>
- /// <param name="configuration"></param>
- public Startup(IConfiguration configuration)
- {
- this.Configuration = configuration;
- }
- /// <summary>
- /// 配置服务
- /// </summary>
- /// <param name="services"></param>
- public void ConfigureServices(IServiceCollection services)
- {
- services.Configure<FastGithubOptions>(this.Configuration.GetSection(nameof(FastGithub)));
- services.AddConfiguration();
- services.AddDomainResolve();
- services.AddHttpClient();
- services.AddReverseProxy();
- services.AddFlowAnalyze();
- services.AddHostedService<AppHostedService>();
- if (OperatingSystem.IsWindows())
- {
- services.AddPacketIntercept();
- }
- }
- /// <summary>
- /// 配置中间件
- /// </summary>
- /// <param name="app"></param>
- public void Configure(IApplicationBuilder app)
- {
- var httpProxyPort = app.ApplicationServices.GetRequiredService<IOptions<FastGithubOptions>>().Value.HttpProxyPort;
- app.MapWhen(context => context.Connection.LocalPort == httpProxyPort, appBuilder =>
- {
- appBuilder.UseHttpProxy();
- });
- app.MapWhen(context => context.Connection.LocalPort != httpProxyPort, appBuilder =>
- {
- appBuilder.UseRequestLogging();
- appBuilder.UseHttpReverseProxy();
- app.UseStaticFiles();
- appBuilder.UseRouting();
- appBuilder.UseEndpoints(endpoint =>
- {
- endpoint.MapGet("/flowStatistics", context =>
- {
- var loggingFeature = context.Features.Get<IRequestLoggingFeature>();
- if (loggingFeature != null)
- {
- loggingFeature.Enable = false;
- }
- var flowStatistics = context.RequestServices.GetRequiredService<IFlowAnalyzer>().GetFlowStatistics();
- return context.Response.WriteAsJsonAsync(flowStatistics);
- });
- });
- });
- }
- }
- }
|