首页 > 解决方案 > 由于 angularjs 的 web.config 中的重写规则导致的 Scriptmanager 问题

问题描述

我有一个 angulajs 应用程序,它将路由实现为

.config(function ($routeProvider, $locationProvider) {
            $routeProvider
                .when("/home", {
                    templateUrl: "home.html",
                    controller: "homeController"
                })
                .when("/filter", {
                    templateUrl: "filter.html",
                    controller: "filterController"
                })

我在 asp.net web.config 中有一个重写规则,如下所示 - SO

<rewrite>
  <rules>
    <rule name="AngularJS" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/webmasterpage.html" />
    </rule>
  </rules>
</rewrite>

使路由在 asp 应用程序中工作,但由于我面临的重写规则

WebResource.axd 和 ScriptResource.axd 中出现意外的令牌 < 错误

并且

ASP.NET Ajax 客户端框架未能为 asp:scriptmanager 加载错误

如果我在 web.config 文件中注释掉重写规则,这个错误就会消失,但是 angularjs 路由将不起作用!以何种方式我们可以编写重写规则,以便我们(asp scriptmanager 和 angularjs 路由)都能正常工作。任何帮助表示赞赏

标签: asp.netangularjsiis-7web-config

解决方案


所以在谷歌搜索了很多之后,我终于能够突破同样的问题。在这里分享我的答案,以便将来可以帮助某人。所以我在 web.config 文件中配置了 angular 的规则如下:

 <rewrite>
  <rules>
    <rule name="AngularJS" 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_FILENAME}" pattern="(.*?)\.html$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.js$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.css$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.aspx$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.axd$" negate="true" />
      </conditions>
      <action type="Rewrite" url="/webmasterpage.html" />
    </rule>
  </rules>
</rewrite>

你可以在这里注意

        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.html$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.js$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.css$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.aspx$" negate="true" />
        <add input="{REQUEST_FILENAME}" pattern="(.*?)\.axd$" negate="true" />

我已经特别提到了我想要加载和访问的文件扩展名。.axd是由 asp 动态生成的,并且没有被加载,因此在规则中专门列出后,它现在正在加载。我不太了解技术,但这对我有用,我相信也会帮助其他人。:)


推荐阅读