【发布时间】:2018-01-08 12:30:08
【问题描述】:
我想在同一个 VPS 上托管我的 ASP Core 网站的两个版本,一个用于每个提供的环境(暂存和测试)。我希望可以从同一 URL 的子文件夹访问这两个网站:
在阅读了很多之后,我发现了以下 Github 问题:https://github.com/aspnet/Hosting/issues/815
此提示有效但对于 AJAX 调用它会崩溃:确实,JavaScript 调用不知道这个新路径(BUG?)。所有请求都发送到根基路径(忽略/Staging 或/Test)。
我使用中间件部分解决了它,该中间件将我的 AJAX 调用重定向到正确的路径。它适用于 GET 请求,但对于具有正文的 POST 请求显然失败。
请注意,如果我们不重定向,只是在中间件中更改原始 PathBase 请求,如果 API 调用需要任何身份验证模式,则会抛出 401 错误:原始 PathBase 是根/,其中响应具有不同的路径基,即/Staging,则标头中的 cookie 会阻止此跨路径基请求/响应。
谁能告诉我满足我需求的推荐做法是什么?
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env
{
app.UsePathBase($"/{env.EnvironmentName}");
...
}
我的中间件:
public async Task Invoke(HttpContext context)
{
if (context.Request.Headers[RequestedWithHeader] == XmlHttpRequest)
{
if (string.IsNullOrEmpty(context.Request.PathBase))
{
if (context.Request.Method == HttpMethod.Post.Method)
{
// Do what ?
}
else
{
//Get request : set environement name + original path + original query string
context.Response.Redirect(context.Request.Path.ToString().Insert(0, "/" + _env.EnvironmentName) + context.Request.QueryString);
return;
}
}
}
}
【问题讨论】: