【问题标题】:How do I make Angular JS 1 routing work in ASP.Net MVC Core while running in IIS?在 IIS 中运行时,如何使 Angular JS 1 路由在 ASP.Net MVC Core 中工作?
【发布时间】:2017-02-24 19:31:34
【问题描述】:

我正在开发一个 ASP.Net Core MVC/Angular JS 应用程序。

当我通过 VS 2015 和 IIS Express 进行开发和运行时,一切正常。

但是当我将文件发布到本地 IIS 并尝试通过那里运行时,它不起作用。主页运行良好,这实际上是 Angular 的最终路线:

$routeProvider.otherwise({
        templateUrl: "/app/views/home.html"
    });

我终于找到了发生的事情,但我不知道为什么?
在我的 ASP.Net Core MVC _Layout.cshtml 的 NavBar 中,我的 <a> 元素如下所示:

<a href="#!/employee_list">Employees</a>
<a href="#!/non_employees">Non Employees</a>

通过 VS 2015 和 IIS Express 在 Dev 中运行良好。 URL 如下所示:

http://localhost:2352/#!/employee_list

一切都按原样呈现。

但在通过完整的 IIS(即本地)发布和运行后,相同的 &lt;a&gt; 链接会给出这样的 URL:

http://lerd/#/!/employee_list

注意 '#' 和 '!' 之间的 '/'。

所以我得到的是 '/#/!/employee_list' 而不是 '/#!/employee_list'。

到底是什么原因造成的?有其他人经历过吗?


我刚刚注意到,如果您在浏览器中手动输入正确的 URL 并按 Enter 键,它会在其中粘贴额外的斜杠。所以它不是真正的应用程序。是浏览器,也可能是 IIS。

【问题讨论】:

    标签: angularjs iis asp.net-core-mvc


    【解决方案1】:

    好吧,您似乎需要在 prod 上使用 '#' 和 '#!'在开发中。

    所以我在布局文件中设置了 NavBar:

    <environment names="Development">
        <li><a href="#!/employee_list">Employees</a></li>
        <li><a href="#!/non_employees">Non Employees</a></li>
    </environment>
    <environment names="Staging,Production">
        <li><a href="#/employee_list">Employees</a></li>
        <li><a href="#/non_employees">Non Employees</a></li>
    </environment>
    

    【讨论】:

    • 您在 Angular 应用程序的 config 中启用了 hasbang 模式?我不认为那是必要的,因为你没有使用html5mode..
    • 请问什么是hasbang模式?这是做什么?如何关闭它?
    • 这就是我问的原因,我猜你还没有使用 hashbang.. 你应该形成你的 URL,比如#/employee_list 而不是#!/employee_list.. 你可以阅读hashbang mode here
    • 更好 - 停止使用 href 并使用正确的路由到状态。
    • Lex - 不知道这意味着什么。能否详细说明。无用的答案应保密。
    猜你喜欢
    • 2019-07-04
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多