From 44f86eb8a111b91ef0600ea035362634eb3c26f0 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Tue, 11 Jul 2017 16:27:31 +0100 Subject: [PATCH] Fix webpack HMR proxying logic for apps running on non-root URLs (e.g., full IIS virtual directories) --- .../Webpack/ConditionalProxyMiddleware.cs | 7 ++++++- .../Webpack/WebpackDevMiddleware.cs | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs b/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs index ba0cf9f9..1b36cd58 100644 --- a/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs +++ b/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs @@ -28,6 +28,11 @@ public ConditionalProxyMiddleware( string pathPrefix, ConditionalProxyMiddlewareOptions options) { + if (!pathPrefix.StartsWith("/")) + { + pathPrefix = "/" + pathPrefix; + } + _next = next; _pathPrefix = pathPrefix; _options = options; @@ -65,7 +70,7 @@ private async Task PerformProxyRequest(HttpContext context) requestMessage.Headers.Host = _options.Host + ":" + _options.Port; var uriString = - $"{_options.Scheme}://{_options.Host}:{_options.Port}{context.Request.PathBase}{context.Request.Path}{context.Request.QueryString}"; + $"{_options.Scheme}://{_options.Host}:{_options.Port}{context.Request.Path}{context.Request.QueryString}"; requestMessage.RequestUri = new Uri(uriString); requestMessage.Method = new HttpMethod(context.Request.Method); diff --git a/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs b/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs index 9f022238..cfcbb7ce 100644 --- a/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs +++ b/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs @@ -101,9 +101,9 @@ public static void UseWebpackDevMiddleware( // plus /__webpack_hmr is proxied with infinite timeout, because it's an EventSource (long-lived request). foreach (var publicPath in devServerInfo.PublicPaths) { + appBuilder.UseProxyToLocalWebpackDevMiddleware(publicPath + hmrEndpoint, devServerInfo.Port, Timeout.InfiniteTimeSpan); appBuilder.UseProxyToLocalWebpackDevMiddleware(publicPath, devServerInfo.Port, TimeSpan.FromSeconds(100)); } - appBuilder.UseProxyToLocalWebpackDevMiddleware(hmrEndpoint, devServerInfo.Port, Timeout.InfiniteTimeSpan); } private static void UseProxyToLocalWebpackDevMiddleware(this IApplicationBuilder appBuilder, string publicPath, int proxyToPort, TimeSpan requestTimeout)