diff --git a/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs b/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs index 1b36cd5..292f62d 100644 --- a/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs +++ b/src/Microsoft.AspNetCore.SpaServices/Webpack/ConditionalProxyMiddleware.cs @@ -22,6 +22,7 @@ namespace Microsoft.AspNetCore.SpaServices.Webpack private readonly RequestDelegate _next; private readonly ConditionalProxyMiddlewareOptions _options; private readonly string _pathPrefix; + private readonly bool _pathPrefixIsRoot; public ConditionalProxyMiddleware( RequestDelegate next, @@ -35,6 +36,7 @@ namespace Microsoft.AspNetCore.SpaServices.Webpack _next = next; _pathPrefix = pathPrefix; + _pathPrefixIsRoot = string.Equals(_pathPrefix, "/", StringComparison.Ordinal); _options = options; _httpClient = new HttpClient(new HttpClientHandler()); _httpClient.Timeout = _options.RequestTimeout; @@ -42,7 +44,7 @@ namespace Microsoft.AspNetCore.SpaServices.Webpack public async Task Invoke(HttpContext context) { - if (context.Request.Path.StartsWithSegments(_pathPrefix)) + if (context.Request.Path.StartsWithSegments(_pathPrefix) || _pathPrefixIsRoot) { var didProxyRequest = await PerformProxyRequest(context); if (didProxyRequest) diff --git a/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs b/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs index 190fb49..2e8f92e 100644 --- a/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs +++ b/src/Microsoft.AspNetCore.SpaServices/Webpack/WebpackDevMiddleware.cs @@ -17,7 +17,10 @@ namespace Microsoft.AspNetCore.Builder private static readonly JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings { - ContractResolver = new CamelCasePropertyNamesContractResolver(), + // Note that the aspnet-webpack JS code specifically expects options to be serialized with + // PascalCase property names, so it's important to be explicit about this contract resolver + ContractResolver = new DefaultContractResolver(), + TypeNameHandling = TypeNameHandling.None };