我们正在使用带有Typescript的Angular 2应用程序。服务器是一个轻量级的NancyFX(C#),配置为响应重定向到" /"如果进行了未知的api呼叫。
所以我们要做的是: 应用程序已启动,用户已登录。现在,他想要打开第二个选项卡,通过"在新选项卡中打开链接"或使用CTRL +单击。
应用程序再次使用某种路径URL在新标签页中打开(例如" / order / 5")。服务器响应重定向到" /" (基本角度路线),应用程序启动,加载所有有角度的东西,被重定向到基本路线并检查是否有可供用户使用的令牌,如果是 - >>它应该重定向到原始请求URL
问题:原始网址请求(" / order / 5")已消失,因为服务器仅重定向到" /"。
是否有可能以任何方式存储URL(例如在localstorage中),以便客户端知道重定向的位置?
我读到了一些关于阅读关键/点击事件的内容,但这有点骇人听闻。
我看到的唯一方法是保留服务器代码中的URL,但这必须分别针对每个浏览器会话或某种window.history进行,但我们应该如何知道这是一个新的会话还是只是一个页面刷新??
我们使用默认的PathLocationStrategy。
有人有想法或者只是不可能吗?
更新: 我的南希托管模块
public HostingModule()
{
Get["/"] = o => Response.AsFile(Path.Combine(Response.RootPath, "index.html"));
Get["/{ignored*}", ctx => ctx.Request.Headers.Accept.Any(x => x.Item1 == "text/html")] = o =>
{
return Response.AsFile(Path.Combine(Response.RootPath, "index.html"));
};
}
因此,所有带有text / html标头的请求都应该被接受并返回默认的index.html。这有效。
但是:问题是index.html中的所有文件都被请求与原始路径相对: e.g。
第一个请求:" foo.com/order/5" - >响应index.html - >之后客户端开始加载index.html中的所有脚本 - >但是由于请求是foo.com/order/5,所有脚本都尝试加载: foo.com/order/script1.js而不是foo.com/script1.js
- >所以我只得到了一堆404错误,或者如果我将重定向StatusCodehandler保留为404错误,它会一次又一次地将客户端重定向到index.html ......
但是感谢您的帮助
答案 0 :(得分:0)
因此,您需要重定向才能显示包含角度应用的index.html
。我解决这个问题的方法是使用2条路由,索引路由和一条寻找带有text/html
值的accept头的贪婪路由(应该是任何浏览器请求)
第一条路线是:
Get("/", ...);
这是索引着陆页。
第二条路线是使用贪婪的路线:
https://github.com/NancyFx/Nancy/wiki/Defining-routes#pattern
Get("/{ignored*}", ..., ctx => ctx.Request.Headers.Accept.Any(x => x.Item1 == "text/html"));
因此,任何不寻找html的请求,都会返回默认页面。虽然应该看起来接受application/json
的角度的任何内容都会响应所有其他查询。