如何使我在 VS 2015 Web 开发环境上运行的 AngularJS SPA 正确刷新

Posted

技术标签:

【中文标题】如何使我在 VS 2015 Web 开发环境上运行的 AngularJS SPA 正确刷新【英文标题】:How can I make my AngularJS SPA running on VS 2015 web development environment refresh correctly 【发布时间】:2016-08-30 21:32:40 【问题描述】:

我有一个使用 Visual Studio 2015 开发的 AngularJS SPA 应用程序。当我单击发布时,它会发布 index.html 并且工作正常。但是,如果我在一个页面上并单击刷新,那么它会尝试刷新 SPA 页面,例如 example.com/home/about。这失败了,因为我没有主页/关于页面。

有什么方法可以修改我的 web.config 文件(仅用于本地测试),以便它实际上进入 index.html(加载它),然后进入 /home/about 状态?

这是我当前的 web.config:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

【问题讨论】:

您需要在您的网络配置上设置 URL 重写规则 这就是你要找的东西吗:***.com/questions/12614072/… 【参考方案1】:

您似乎正在使用html5mode。在这种情况下,没有 # 来保持 URL 从请求到服务器的变化。 使用此配置,您需要服务器的帮助。它会在收到来自您的 SPA 路由的请求时为 index.html 提供服务。

这个SO answer 有关于在 web.config 上配置 URL 重写的详细信息:

规则:

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="AngularJS Routes" 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>

它假定您的 API 位于:/api 并且对于它找到的任何目录或文件,它都按原样提供服务。 其他任何内容,都被重写为/,将默认文档配置为index.html,将加载您的SPA。

另请注意,您需要为 IIS 安装 URL Rewrite module (IIS Express doesn't need the module)

另一个选项是这些轻量级 HTTP 服务器 npm 包之一。 John Papa has one: lite-server。它在后台使用BrowserSync:

BrowserSync 在超快速轻量级中完成了我们想要的大部分工作 开发服务器。它提供静态内容,检测变化, 刷新浏览器,并提供许多自定义。

创建 SPA 时,有些路由只有 浏览器。例如,/customer/21 可能是一个客户端路由 角应用程序。如果此路线是手动输入或直接链接到 作为 Angular 应用程序(又名深层链接)的入口点,静态 服务器将收到请求,因为 Angular 尚未加载。 服务器将找不到路由的匹配项,因此返回 404。 在这种情况下,所需的行为是返回 index.html(或 我们定义的应用程序的任何起始页面)。 BrowserSync 可以 不会自动允许后备页面。但它确实允许 自定义中间件。这就是 lite-server 介入的地方。

lite-server 是一个简单的 BrowserSync 自定义包装器,用于制作 很容易为 SPA 服务。

【讨论】:

我试过了,但它似乎不适用于 Visual Studio 2015 使用的开发服务器。

以上是关于如何使我在 VS 2015 Web 开发环境上运行的 AngularJS SPA 正确刷新的主要内容,如果未能解决你的问题,请参考以下文章

vs2005 开发的WEB项目如何发布到IIS上

VS2015开发环境配置

技术干货VS Code-CC++环境的搭建

Spark RDD groupByKey + join vs join 性能

如何利用VS2010进行QT开发的环境配置

vs2017运行不起来.net web程序,包不兼容