Add configurable BasePath for subfolder hosting and update frontend base handling

This commit is contained in:
2026-01-28 20:00:54 +01:00
parent 1129947183
commit 4509c0f8a8
5 changed files with 21 additions and 3 deletions

1
IIS.md
View File

@@ -12,6 +12,7 @@
- Set environment variables in web.config or IIS config:
- `ASPNETCORE_ENVIRONMENT=Production`
- `ADMIN_PASSWORD=<your-secret>`
- `BasePath=/vote` (only if the site is under a subfolder; omit for root)
- Optional: enable stdout logging in `web.config` during troubleshooting only; disable afterward.
## Permissions

View File

@@ -38,6 +38,12 @@ builder.Services.ConfigureHttpJsonOptions(options =>
var app = builder.Build();
var basePath = builder.Configuration["BasePath"];
if (!string.IsNullOrWhiteSpace(basePath))
{
app.UsePathBase(basePath);
}
app.UseGlobalExceptionLogging();
// Ensure database and migrations are applied on startup

View File

@@ -6,6 +6,7 @@
}
},
"AllowedHosts": "*",
"BasePath": "",
"ConnectionStrings": {
"Default": "Data Source=App_Data/gamelist.db"
}

View File

@@ -5,6 +5,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CoopGameChooser</title>
<link rel="stylesheet" href="styles.css">
<!-- Optional: set data-app-base if served from a subfolder (e.g., /vote) -->
<meta name="app-base" content="">
</head>
<body>
<div class="status-bar">

View File

@@ -1,7 +1,15 @@
const defaultHeaders = { "Content-Type": "application/json" };
const metaBase = document.querySelector('meta[name="app-base"]')?.content || "";
const autoBase = (() => {
const parts = window.location.pathname.split("/").filter(Boolean);
return parts.length ? `/${parts[0]}` : "";
})();
const basePath = metaBase || autoBase;
const withBase = (path) => `${basePath}${path}`;
async function request(path, { method = "GET", body, adminKey } = {}) {
const res = await fetch(path, {
const res = await fetch(withBase(path), {
method,
headers: {
...defaultHeaders,