AngularJS漂亮的Urls路由刷新

时间:2015-11-06 17:15:28

标签: javascript html asp.net angularjs iis

我使用与AngularJS路由的漂亮网址,这是我的angularJS代码

var app = angular.module('app.home', ['ngRoute', 'ngAnimate']);

app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
    $routeProvider.
        when('/', {
            templateUrl: 'static/home.html',
            controller: 'AppController'
        }).
        when('/about', {
            templateUrl: 'static/about.html',
            controller: 'AppController'
        }).
        when('/contact', {
            templateUrl: 'static/contact.html',
            controller: 'AppController'
        }).
        when('/tutorial', {
            templateUrl: 'static/tutorial.html',
            controller: 'AppController'
        }).
        otherwise({
            redirectTo: '/'
        });

    $locationProvider.html5Mode(true);
}]);

app.controller('AppController', function ($scope) {

});

它工作正常,但是当我导航到/ about(或除#&;;'以外的任何网址)并点击刷新时,它显示服务器无法找到资源错误。我使用的是ASP.NET 5.有没有办法重定向到刷新后用户点击刷新的页面?

2 个答案:

答案 0 :(得分:1)

您需要将服务器配置为返回与您的angularjs路由匹配的任何路由的主html文件。所以你的服务器应该返回/index.html或你的文件,对于任何请求:/ about,/ tutorial,... etc

答案 1 :(得分:1)

确保在web.config

中包含正确的重写
<system.webServer>
    <rewrite>
      <rules>
        <rule name="AngularJS" 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="{REQUEST_URI}" pattern="^/(api)" negate="true" />
          </conditions>
          <action type="Rewrite" url="/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

请务必在<base href="/">中加入<head>(或其他适用的,如果使用&gt; 1.2.x)。嗯? Why would we need that?

以下简短的博客文章是一篇不错的文章,简单地说明了为什么我们需要这样做...

Deep Linking AngularJS on Windows Azure IIS

关于ASP.NET 5,仍然支持web.config,但它应该进入wwwroot文件夹。您可能缺少IIS的Url Rewrite模块。