12

所以我设置了一个 HTML5 单页应用程序,它运行良好。该页面位于/App/,当有人进入内容时,它看起来像/App/Content/1234.

一个问题:如果用户刷新页面,服务器将找不到该 URL,因为它实际上并不存在。如果我将它们发送到/App/#/Content/1234,它们是金色的,但是最好的方法是什么?我在 /App 下有很多不同风格的 URL。

全局捕获任何请求~/App/(.*)并将其重定向到的最佳方法是什么~/App/#/$1

在 MVC 中注册的唯一路由是标准的 OOTB 路由。

4

2 回答 2

4

听起来您的服务器没有将 url 重写为应用程序的基本 URL。

Web 服务器上所需的 URL 重写取决于服务器。对于 Apache,您将使用 mod_rewrite。

相反,将 Angular 切换到“Hashbang 模式”(默认),这样 url 将全部存储在 url 中 # 之后的本地状态。

我不希望我的应用程序需要更改服务器配置,所以我推荐 hashbang 模式。

请参阅AngularJS 文档。请参阅“Hashbang 和 HTML5 模式”部分 HTML5 模式部分描述了支持 URL 的 HTML5 模式所需的所有配置问题。

于 2012-08-03T02:30:11.453 回答
2

这个了不起的家伙在这里描述了如何解决这个问题

简单来说:

  1. 删除 MVC nuget(除非您将 MVC 控制器用于任何事情) - 您可以保留 Web API nuget。保留网页和 Razor 包。同时删除 MVC 控制器和视图。
  2. 您可以继续使用带有一些 web.config 修改的 .cshtml 文件。你需要这个来捆绑。
  3. 最后,在 web.config 上添加一个重写规则,将所有 url(不包括内容、图像、脚本等)指向 index.html
于 2013-06-27T14:19:14.640 回答