深度链接单页应用程序与dotNet核心

时间:2016-07-06 14:20:54

标签: asp.net-core angular2-routing

我正在使用dotNet核心项目来托管Angular2应用程序。我遇到了深层链接网址的问题。

例如,当我最初浏览到http://localhost:54675/app/dashboard时,我收到404错误,因为在app / dashboard上没有任何内容可供使用。我想实际加载index.html(角度应用程序),然后路由将我带到app / dashboard。

如果我收到404且URL没有扩展名,我会使用下面的代码重定向到index.html。

app.Use(async (context, next) =>
            {
                await next();

                if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
                {
                    context.Request.Path = "/index.html"; 
                    await next();
                }
            });

当我使用包含JSON的参数进行路由时,这不起作用,例如: http://localhost:54675/app/repairReturnListing;filter=%7B%22Status%22:[%22AWP%22]%7D

我的if语句忽略了带有扩展名的请求,并且Path.HasExtension在此路径上抛出了ArgumentException。该路径在服务器端解析为:

  

“/应用程序/ repairReturnListing;过滤器= {\” 状态\ “:[\” AWP \ “]}”

我删除了'HasExtension'条件然后我收到很多控制台错误,寻找我没有托管的地图文件。像这样:

  

无法解析SourceMap:   http://localhost:54675/lib/js/rxjs/operator/timeout.js.map

我没有在网络标签中看到这些错误。我认为这是用于调试的东西。

我的angular2应用使用HTML5路由。我使用静态文件来为angular2应用程序提供服务。我有一个webApi控制器返回一些配置数据(其余的数据由另一个webApi项目返回)。

等待404并重定向似乎是一种解决方法,它甚至都没有工作。 有关最佳方法的任何建议吗?

1 个答案:

答案 0 :(得分:0)

查看ng2-kestrel-appserver http://tattoocoder.com/kestrel-as-a-static-server-for-angular/

正是您正在寻找的东西。它是为RC2创建的,但应该适用于当前版本,只需很少或不需要更改。