我有一个基于LitElement的SPA,它有一个承载静态文件的ASP.NET核心后端,还有一个用于将数据加载到SPA中的REST。
用户从/index.html开始,客户端路由器将他带到f.e. /data-analysis或/dashboard。
当用户现在按下浏览器刷新按钮时,她得到404,这是预期的,因为服务器不知道这些子路径中的任何一个。
我在其他地方读到,我必须在服务器端处理这个问题,所以我在我的Startup.cs配置方法中提出了这个中间件:
app.Use(async (c, next) =>
{
//Identify subpaths...
c.Request.Path = "/index.html";
await next();
});对于所有的子路径,它将用户带回到index.html,这是很好的。更好的做法是让客户端知道要还原哪个子路径。为此,我在上面的代码中添加了以下行:
var url = c.Request.Path.Value;
c.Request.QueryString = c.Request.QueryString.Add("page", $"{url.Substring(1)}");我以为客户会看到window.location of,f.e。
./index.html?page=数据分析
但是查询字符串永远不会到达,window.location.search在客户端总是空的。
这有可能吗,还是我误会了什么?
尼古拉斯
发布于 2022-10-12 22:54:42
通过研究Microsofts关于URL重写中间件的文档,我得出结论,我应该重定向而不是重写!下面的代码产生所需的结果。请注意,“返回”语句是关键的,因为不应该再调用中间件了!
app.Use(async (c, next) =>
{
var url = c.Request.Path.Value;
//Identify subpaths...
if(... should redirect ...)
{
c.Response.Redirect($"/index.html?page={url.Substring(1)}");
return;
}
await next();
});https://stackoverflow.com/questions/73888587
复制相似问题