簡體   English   中英

重寫angular和ASP.NET MVC的規則

[英]Rewrite rules for angular and ASP.NET MVC

我正在關注本文(有關使用URL重寫的底部)。 我的IIS Express(從VS啟動)的配置文件似乎位於C:\\ Users [此處的用戶名] \\ documents \\ IISexpress \\ applicationhost.config。

我將重寫規則放在<system.webServer>標記內,就像該文章(以及我讀過的許多其他文章)所說的那樣。 所以看起來像:

<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>

... all the other crap that was already there
</system.webServer>

在我的VS項目中,我的根目錄下有index.htm,在Views文件夾下有測試視圖。 這是index.htm,當我單擊鏈接就可以了。

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js"></script>
<head>
    <base href="/">
    <title></title>
    <meta charset="utf-8" />
</head>
<body ng-app="myApp">
    <p><a href="/">Main</a></p>

    <a href="red">Red</a>
    <a href="green">Green</a>
    <a href="blue">Blue</a>

    <!-- below is where the partial pages will replace -->
    <div ng-view></div>

    <script>
    var app = angular.module("myApp", ["ngRoute"]);

    app.config(function($routeProvider, $locationProvider) {
        $routeProvider
        .when("/red", {
            templateUrl: "Views/red.htm",
            controller: "redController"
        })
        .when("/green", {
            templateUrl: "Views/green.htm",
            controller: "greenController"
        })
        .when("/blue", {
            templateUrl: "Views/blue.htm",
            controller: "blueController"
        });

        $locationProvider.html5Mode(true);
    });

    app.controller("redController", function($scope){
        //alert("Red");
    });

    app.controller("blueController", function ($scope) {
        //alert("Blue");
    });

    app.controller("greenController", function ($scope) {
        //alert("Green");
    });
    </script>
</body>
</html>

當我嘗試輸入這些頁面方向之一時,就會出現問題:即。 http:// localhost:60553 / red

我得到一個404。這告訴我,重寫規則沒有被執行,而是在起作用。 即使使用該重寫規則,為什么也得到404?

我猜這是因為您的Views文件夾有一個web.config ,它明確阻止了對其的請求。 出於安全原因,默認情況下將其放置在MVC項目中。

請在Views/Web.Config注意以下代碼

  <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>

如果您對此進行注釋,則您的代碼應該可以工作。

但是,我建議將您的角度視圖移到另一個文件夾中,這不是MVC的實際保留文件夾。 更改為ngView代碼,此代碼將起作用。 這樣一來,它會變得更加干凈和清晰,而且您不會冒把窺探者代碼暴露給窺探用戶的風險。

更新根據評論,以上不是問題。 問題是未從提到的文件中使用重寫規則。 如果可能的話,將它們移至web.config-這將避免設置全局規則,無論如何將其應用於所有iis Express應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM