由于 web.config 中 angularjs 的重写规则导致脚本管理器问题

Scriptmanager issue because of rewrite rule in web.config for angularjs

我有一个实现路由的 angulajs 应用程序 作为

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

我在 asp.net web.config 中有一个重写规则如下 正如这里所建议的——

<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 应用程序中工作,但由于我面临的重写规则

Unexpected token < error in WebResource.axd and ScriptResource.axd

还有

ASP.NET Ajax client-side framework failed to load error for asp:scriptmanager

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

所以在谷歌搜索了很多之后,我终于能够突破同样的问题。在这里分享我的答案,以便将来对某人有所帮助。 所以我在 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 动态生成的,没有加载,所以在规则中明确列出后,它现在正在加载。 我不太了解技术细节,但这对我有用,我相信也会帮助其他人。 :)