使用路径参数在Aurelia中路由问题

时间:2018-02-01 14:13:23

标签: asp.net aurelia pushstate aurelia-router

使用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('');
}

使用链接

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

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

它在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>

我做错了什么?

由于

编辑:此错误仅发生在具有routeparameters

的路线上

2 个答案:

答案 0 :(得分:3)

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

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

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

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

另外,请确保测试Internet Explorer 11,因为它比其他浏览器更挑剔。

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

答案 1 :(得分:0)

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

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

规则有错。由于你的html要求一个带有相对路径的脚本 - 服务器查找&#34;目录&#34;并且没有文件。所以它放弃了你的index.html(或者网站根目录服务的任何东西)而不是脚本。