使用 ASP.NET MVC 时无法从 angular 路由中删除 !#

Unable to remove !# from angular routes while using ASP.NET MVC

我在我的 MVC 应用程序中使用 AngularJS。我面临着 !# 出现在 URL 中的非常常见的路由问题。我一直在寻找解决方案,几乎在每一个被接受的答案中都找到了这个解决方案,但在我的案例中却惨遭失败。 我在路由中使用了这行代码:

$locationProvider.html5Mode(true).hashPrefix('!');

这一行没有任何改变。我也试过这个:

$locationProvider.html5Mode(true);

但运气不好。 另外,我在我的 <head> 标签中使用了这个标签:

<base href="/">

这一行也没有任何改变。

我的路由代码和导航代码如下:

app.config(function ($routeProvider, $locationProvider) {
    $routeProvider
        .when("/", {
            templateUrl: "payment/MakePayment",
            controller: "paymentController"
        })
        .when("/SearchPayment", {
            templateUrl: "payment/SearchPayment",
            controller: "paymentController"
        })
        .when("/Flush", {
            templateUrl: "payment/InvalidateCacheForIndexAction",
            controller: "paymentController"
        });
    $locationProvider.html5Mode(true).hashPrefix('!');
});

导航码-

    <div class="navbar-collapse collapse">
        <ul class="nav navbar-nav">
            <li><a href="/">Make Payment</a></li>
            <li><a href="#SearchPayment">Search Payment</a></li>
            <li><a href="#Flush">Flush</a></li>                    
        </ul>
    </div>

网站启动后,我在浏览器中看到 http://localhost:56810/。当我点击 Search Payment link 时,浏览器中的 URL 显示为 http://localhost:56810/#!#SearchPaymentFlush 也会发生同样的事情。导航也不会发生。这意味着给定的 routeProvider 路由不会处理 URLs 中的更改。

只需使用

$locationProvider.html5Mode(true).hashPrefix('');

并删除 #

<li><a href="SearchPayment">Search Payment</a></li>
<li><a href="Flush">Flush</a></li>  

只需使用以下内容,这样您就不必将服务器端配置为仅处理 "/"

$locationProvider.html5Mode(false).hashPrefix('');

并删除 #

<li><a href="SearchPayment">Search Payment</a></li>
<li><a href="Flush">Flush</a></li>