首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有查询参数的ASP.NET核心URL重写

带有查询参数的ASP.NET核心URL重写
EN

Stack Overflow用户
提问于 2022-09-28 22:51:23
回答 1查看 31关注 0票数 0

我有一个基于LitElement的SPA,它有一个承载静态文件的ASP.NET核心后端,还有一个用于将数据加载到SPA中的REST。

用户从/index.html开始,客户端路由器将他带到f.e. /data-analysis或/dashboard。

当用户现在按下浏览器刷新按钮时,她得到404,这是预期的,因为服务器不知道这些子路径中的任何一个。

我在其他地方读到,我必须在服务器端处理这个问题,所以我在我的Startup.cs配置方法中提出了这个中间件:

代码语言:javascript
运行
复制
  app.Use(async (c, next) =>
  {              
      //Identify subpaths...

      c.Request.Path = "/index.html";                  

      await next();
  });

对于所有的子路径,它将用户带回到index.html,这是很好的。更好的做法是让客户端知道要还原哪个子路径。为此,我在上面的代码中添加了以下行:

代码语言:javascript
运行
复制
  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在客户端总是空的。

这有可能吗,还是我误会了什么?

尼古拉斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 22:54:42

通过研究Microsofts关于URL重写中间件的文档,我得出结论,我应该重定向而不是重写!下面的代码产生所需的结果。请注意,“返回”语句是关键的,因为不应该再调用中间件了!

代码语言:javascript
运行
复制
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();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73888587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档