/// <summary> /// BasicForwardedHeadersMiddleware /// </summary> public BasicForwardedHeadersMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions <BasicForwardedHeadersOptions> options) { if (next == null) { throw new ArgumentNullException(nameof(next)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } // Make sure required options is not null or whitespace EnsureOptionNotNullorWhitespace(options.Value.ForwardedPathBaseHeaderName, nameof(options.Value.ForwardedPathBaseHeaderName)); EnsureOptionNotNullorWhitespace(options.Value.ForwardedBaseUrlHeaderName, nameof(options.Value.ForwardedBaseUrlHeaderName)); EnsureOptionNotNullorWhitespace(options.Value.OriginalPathHeaderName, nameof(options.Value.OriginalPathHeaderName)); EnsureOptionNotNullorWhitespace(options.Value.OriginalForHeaderName, nameof(options.Value.OriginalForHeaderName)); EnsureOptionNotNullorWhitespace(options.Value.OriginalHostHeaderName, nameof(options.Value.OriginalHostHeaderName)); EnsureOptionNotNullorWhitespace(options.Value.OriginalProtoHeaderName, nameof(options.Value.OriginalProtoHeaderName)); _options = options.Value; _logger = loggerFactory.CreateLogger <BasicForwardedHeadersMiddleware>(); _next = next; //PreProcessHosts(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseCookiePolicy(); var basicForwardedHeadersOptions = new BasicForwardedHeadersOptions() { ForwardedHeaders = BasicForwardedHeaders.IntranetPenetration | BasicForwardedHeaders.XForwardedPathBase }; app.UseBasicForwardedHeaders(basicForwardedHeadersOptions); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // 代理服务器 var forwardedHeadersOptions = new ForwardedHeadersOptions() { ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.All }; forwardedHeadersOptions.KnownNetworks.Clear(); forwardedHeadersOptions.KnownProxies.Clear(); forwardedHeadersOptions.KnownProxies.Add(IPAddress.Parse("172.17.0.1")); forwardedHeadersOptions.KnownProxies.Add(IPAddress.Parse("172.26.90.90")); forwardedHeadersOptions.KnownProxies.Add(IPAddress.Parse("192.168.200.55")); app.UseForwardedHeaders(forwardedHeadersOptions); var basicForwardedHeadersOptions = new BasicForwardedHeadersOptions() { ForwardedHeaders = AspNetCore.BasicOverrides.BasicForwardedHeaders.IntranetPenetration | AspNetCore.BasicOverrides.BasicForwardedHeaders.XForwardedPathBase }; app.UseBasicForwardedHeaders(basicForwardedHeadersOptions); app.UseRouting(); app.UseWebSockets(); app.MapWebSocketManager("/ws", app.ApplicationServices.GetRequiredService <LoginMessageHandler>()); app.UseIdentityServer(); //IdentityServer4 app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapRazorPages(); }); }