Support hosting at non-root URL. Prove it by updating BasicTestApp to serve from non-root location.
This commit is contained in:
parent
7073429cd5
commit
8bc7c92683
|
|
@ -20,7 +20,7 @@ async function boot() {
|
|||
// Determine the URLs of the assemblies we want to load
|
||||
const loadAssemblyUrls = [entryPointDll]
|
||||
.concat(referenceAssemblies)
|
||||
.map(filename => `/_framework/_bin/${filename}`);
|
||||
.map(filename => `_framework/_bin/${filename}`);
|
||||
|
||||
try {
|
||||
await platform.start(loadAssemblyUrls);
|
||||
|
|
|
|||
|
|
@ -48,9 +48,9 @@ export const monoPlatform: Platform = {
|
|||
callEntryPoint: function callEntryPoint(assemblyName: string, entrypointMethod: string, args: System_Object[]): void {
|
||||
// Parse the entrypointMethod, which is of the form MyApp.MyNamespace.MyTypeName::MyMethodName
|
||||
// Note that we don't support specifying a method overload, so it has to be unique
|
||||
const entrypointSegments = entrypointMethod.split("::");
|
||||
const entrypointSegments = entrypointMethod.split('::');
|
||||
if (entrypointSegments.length != 2) {
|
||||
throw new Error("malformed entry point method name; could not resolve class name and method name");
|
||||
throw new Error('Malformed entry point method name; could not resolve class name and method name.');
|
||||
}
|
||||
const typeFullName = entrypointSegments[0];
|
||||
const methodName = entrypointSegments[1];
|
||||
|
|
@ -146,7 +146,7 @@ export const monoPlatform: Platform = {
|
|||
function addScriptTagsToDocument() {
|
||||
// Load either the wasm or asm.js version of the Mono runtime
|
||||
const browserSupportsNativeWebAssembly = typeof WebAssembly !== 'undefined' && WebAssembly.validate;
|
||||
const monoRuntimeUrlBase = '/_framework/' + (browserSupportsNativeWebAssembly ? 'wasm' : 'asmjs');
|
||||
const monoRuntimeUrlBase = '_framework/' + (browserSupportsNativeWebAssembly ? 'wasm' : 'asmjs');
|
||||
const monoRuntimeScriptUrl = `${monoRuntimeUrlBase}/mono.js`;
|
||||
|
||||
if (!browserSupportsNativeWebAssembly) {
|
||||
|
|
@ -165,8 +165,8 @@ function createEmscriptenModuleInstance(loadAssemblyUrls: string[], onReady: ()
|
|||
|
||||
module.print = line => console.log(`WASM: ${line}`);
|
||||
module.printErr = line => console.error(`WASM: ${line}`);
|
||||
module.wasmBinaryFile = '/_framework/wasm/mono.wasm';
|
||||
module.asmjsCodeFile = '/_framework/asmjs/mono.asm.js';
|
||||
module.wasmBinaryFile = '_framework/wasm/mono.wasm';
|
||||
module.asmjsCodeFile = '_framework/asmjs/mono.asm.js';
|
||||
module.preRun = [];
|
||||
module.postRun = [];
|
||||
module.preloadPlugins = [];
|
||||
|
|
|
|||
|
|
@ -2,11 +2,12 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.IO;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Microsoft.AspNetCore.Blazor.DevHost.Server
|
||||
{
|
||||
|
|
@ -17,14 +18,40 @@ namespace Microsoft.AspNetCore.Blazor.DevHost.Server
|
|||
services.AddRouting();
|
||||
}
|
||||
|
||||
public void Configure(IApplicationBuilder app)
|
||||
public void Configure(IApplicationBuilder app, IConfiguration configuration)
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
EnableConfiguredPathbase(app, configuration);
|
||||
|
||||
var clientAssemblyPath = FindClientAssemblyPath(app);
|
||||
app.UseBlazor(new BlazorOptions { ClientAssemblyPath = clientAssemblyPath });
|
||||
}
|
||||
|
||||
private static void EnableConfiguredPathbase(IApplicationBuilder app, IConfiguration configuration)
|
||||
{
|
||||
var pathBase = configuration.GetValue<string>("pathbase");
|
||||
if (!string.IsNullOrEmpty(pathBase))
|
||||
{
|
||||
app.UsePathBase(pathBase);
|
||||
|
||||
// To ensure consistency with a production environment, only handle requests
|
||||
// that match the specified pathbase.
|
||||
app.Use((context, next) =>
|
||||
{
|
||||
if (context.Request.PathBase == pathBase)
|
||||
{
|
||||
return next();
|
||||
}
|
||||
else
|
||||
{
|
||||
context.Response.StatusCode = 404;
|
||||
return context.Response.WriteAsync($"The server is configured only to " +
|
||||
$"handle request URIs within the PathBase '{pathBase}'.");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static string FindClientAssemblyPath(IApplicationBuilder app)
|
||||
{
|
||||
var env = app.ApplicationServices.GetRequiredService<IHostingEnvironment>();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.IO;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using DevHostServerProgram = Microsoft.AspNetCore.Blazor.DevHost.Server.Program;
|
||||
|
||||
|
|
@ -9,6 +8,8 @@ namespace Microsoft.AspNetCore.Blazor.E2ETest.Infrastructure.ServerFixtures
|
|||
{
|
||||
public class DevHostServerFixture<TProgram> : WebHostServerFixture
|
||||
{
|
||||
public string PathBase { get; set; }
|
||||
|
||||
protected override IWebHost CreateWebHost()
|
||||
{
|
||||
var sampleSitePath = FindSampleOrTestSitePath(
|
||||
|
|
@ -17,7 +18,8 @@ namespace Microsoft.AspNetCore.Blazor.E2ETest.Infrastructure.ServerFixtures
|
|||
return DevHostServerProgram.BuildWebHost(new string[]
|
||||
{
|
||||
"--urls", "http://127.0.0.1:0",
|
||||
"--contentroot", sampleSitePath
|
||||
"--contentroot", sampleSitePath,
|
||||
"--pathbase", PathBase
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,8 @@ namespace Microsoft.AspNetCore.Blazor.E2ETest.Tests
|
|||
public ComponentRenderingTest(BrowserFixture browserFixture, DevHostServerFixture<Program> serverFixture)
|
||||
: base(browserFixture, serverFixture)
|
||||
{
|
||||
Navigate("/", noReload: true);
|
||||
serverFixture.PathBase = "/subdir";
|
||||
Navigate("/subdir", noReload: true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<!-- Local alternative to <RunArguments>blazor serve</RunArguments> -->
|
||||
<RunCommand>dotnet</RunCommand>
|
||||
<RunArguments>run --project ..\..\..\src\Microsoft.AspNetCore.Blazor.DevHost serve</RunArguments>
|
||||
<RunArguments>run --project ..\..\..\src\Microsoft.AspNetCore.Blazor.DevHost serve --pathbase /subdir</RunArguments>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Local alternative to <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" /> -->
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Basic test app</title>
|
||||
<base href="/subdir/" />
|
||||
</head>
|
||||
<body>
|
||||
<app>Loading...</app>
|
||||
|
|
|
|||
Loading…
Reference in New Issue