Aurelia 中的路由问题与路由参数

Routing issue in Aurelia with route params

使用 Aurelia CLI 0.32,我有这个路由配置

public configureRouter(config: RouterConfiguration, router: Router): void {
    this.router = router;

    config.options.pushState = true;
    config.options.root = '';
    config.map([
      { route: ['', 'home'], name: "home", moduleId: 'home/index', title: 'Main page' },
      { route: 'editroute/:id', name: "editroute", moduleId: 'edit/index', title: 'Edit Page' }
    ]);

    config.fallbackRoute('');
}

使用 link

<a route-href="route: editroute; params.bind: {id:item.id}">Edit ${item.name}</a>

我可以导航到路线。但是在浏览器中刷新页面会导致错误,如屏幕截图所示

在asp.net上是运行并且有重写规则支持pushstate

<rewrite>
  <rules>
    <rule name="Main Rule" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{URL}" matchType="Pattern" negate="true" pattern=".*\/((api|signalr)\/.*|loaderio.*)" ignoreCase="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>
</rewrite>

我做错了什么?

谢谢

编辑:此错误仅发生在具有路由参数的路由上

第一步是尝试将 scripts/vendor-bundle.js 的相对路径更改为绝对 /scripts/vendor-bundle.js

如果它不能解决您的问题 - 它至少会阻止下载每条路线的所有脚本 (-:

规则有误。由于您的 html 要求具有相对路径的脚本 - 服务器在 "the directory" 中查找并且没有文件。所以它放弃了你的index.html(或任何在网站根目录下提供的服务)而不是脚本。

为了在深度 URL 时服务器端页面刷新正常工作,您必须修改 aurelia_project/aurelia.json 以在捆绑模块时使用绝对路径:

{
    "build": {
        "targets": [
            {
                // ...
                "baseUrl": "/scripts",
                "useAbsolutePath": true
            }
        ],
        // etc...

另一个可能不需要更改但包含相同属性的地方是:

{
    "platform": {
        // ...
        "baseUrl": "/scripts",
        "useAbsolutePath": true
    }

此外,请务必测试 Internet Explorer 11,因为它比其他浏览器更挑剔。

当然,如前所述,您还必须确保对其他资源也使用绝对路径(/scripts/vendor-bundle.js、字体路径等)