为什么#!在我的角度应用程序的网址中

时间:2016-12-13 12:25:24

标签: asp.net angularjs asp.net-web-api asp.net-core

由于某些未知原因,我在Visual Studio 2015中调试时将 '#!' 添加到我的应用网址。

网址看起来像这样

http://localhost:58394/#!/customers
http://localhost:58394/#!/

我搜索了所有应用程序,如果这是某种拼写错误,但我无法弄清楚这是从哪里来的。

我可以在ASP.NET WEB API以及ASP.NET CORE WEB API中看到...

对于前端我使用角度和角度路线 1.6.0

任何想法来自哪里?

我没有使用html5mode也没有使用基本标签,我很高兴#现在在那里,我只是不明白为什么感叹号(!)在那里......

此应用不会在网络上部署,也不会使用任何可能使用#的外部服务!任何跟踪或其他任何内容的表示法。

感叹号最近才开始出现,所以我想这是由我使用过的一些lib引起的。

我只是想知道为什么'!'在那里以及哪个图书馆强迫这里感叹。

2 个答案:

答案 0 :(得分:5)

我在angualr 1.6.0 changelog

中找到了这个
  

$ location:默认hashPrefix为'!' (aa077e,#13812)

更改日志:https://github.com/angular/angular.js/blob/master/CHANGELOG.md

更改:https://github.com/angular/angular.js/commit/aa077e81129c740041438688dff2e8d20c3d7b52

突然改变

  

$location hash-bang网址的哈希前缀已经改变了   空字符串""到了爆炸"!"。如果您的应用程序不使用   HTML5模式或正在不支持HTML5模式的浏览器上运行,   并且您没有指定自己的哈希前缀,而是指定客户端URL   现在将包含一个"!"字首。例如,而不是   mydomain.com/#/a/b/c将成为mydomain/#!/a/b/c

恢复旧方式只需使用

appModule.config(['$locationProvider', function($locationProvider) {
    $locationProvider.hashPrefix('');
}]);

答案 1 :(得分:1)

你应该申请this,以免有角度

的哈希爆炸
$locationProvider.html5Mode({
  enabled: true,
  requireBase: false
});

<head>
  <base href="/">
  ...
</head>

对于角度2,这就足够了,我想:

<base href="/" />

根据你的评论,似乎有些你如何切换Hashbang模式

配置:

$routeProvider
  .when('/path', {
    templateUrl: 'path.html',
});
$locationProvider
  .html5Mode(false)
  .hashPrefix('!');

请参阅this