【问题标题】:Malformed Cookie error after bundling Angular with MVC 5将 Angular 与 MVC 5 捆绑后出现格式错误的 Cookie 错误
【发布时间】:2014-09-15 15:28:39
【问题描述】:

我有一个 MVC5 项目,我正在使用 Angular 并收到以下错误:

Error: malformed URI sequence
oh/h.cookies@https://controlpanel.abc.com/bundles/controlPanelAngularv=c7IsPcEqfC9w7vlO0f2C635w9XFObG3zp4KjeFBEh-c1:1:18254
g@https://controlpanel.abc.com/bundles/controlPanelAngular?v=c7IsPcEqfC9w7vlO0f2C635w9XFObG3zp4KjeFBEh-c1:1:35522
k/s<@https://controlpanel.abc.com/bundles/controlPanelAngular?v=c7IsPcEqfC9w7vlO0f2C635w9XFObG3zp4KjeFBEh-c1:1:34445
de/u/h.promise.then/c@https://controlpanel.abc.com/bundles/controlPanelAngular?v=c7IsPcEqfC9w7vlO0f2C635w9XFObG3zp4KjeFBEh-c1:1:48272

此错误仅在网站已部署并投入生产时发生。

我认为这与 .net 捆绑事物的方式有关,但我不确定。

我的包看起来像:

bundles.Add(new ScriptBundle("~/bundles/controlPanelAngular").Include(
  "~/Scripts/angular/dist/angular.min.js",
  "~/Scripts/angular/dist/ui-bootstrap-angular.min.js",
  "~/Scripts/angular/dist/master.js"
));

master.js 是我的应用程序的串联文件(使用 grunt 构建)。我不太了解捆绑过程,甚至不知道在哪里看。我已经阅读了有关该过程的文档,但它对此类问题没有提供任何帮助。我可以在谷歌上找到人们遇到的唯一问题是他们的角度不是“缩小友好”,但我的是。我使用了 内联语法 (angular.module('module').controller('ctrl', ['$injector', function($injector)) 所以不是这样。

我的代码没有使用decodeURIComponentencodeURIComponent、角度路由服务、html5Mode$location、cookie 或任何我能想到的会导致此错误的东西。我确实有一个导航服务会被调用几次:

angular.module('core.service').factory('navigatorService', ['$window', function ($window) {
  return {
    redirect: function (newLocation) {
      $window.location.href = newLocation;
    }
  };
}]);

这是我唯一一次访问该网址。我没有使用 url 参数。有一页我什至需要一个,但由于 MVC 构建 url 的方式,我通过 @ViewBag 将它传递给它,而不是用角度解析它:

ng-init="init(@(ViewBag.categoryId));" 

项目的架构师希望我们所有人都使用 asp 操作来生成 url,这样如果位置发生变化,我们的 url 就会得到更新。

为此创建了一个内联工厂:

<script type="text/javascript">
angular.module('core.service').factory('mvcRouterService', function () {
    return {
        getCategoryUrl: function () { return '@Url.Action("GetCategory", "Categories")'; }
    };
});
</script>

这是我用来为 ajax 调用构建所有 url 的。

像这样使用:

angular.module('module').factory('genericAjax', ['$http', '$injector', function ($http, $injector) {
  var mvcRouterService = $injector.get('mvcRouterService');
    return {
      getCategory: function (categoryId) {
        var data = {
          categoryId: categoryId
        };
      return $http.post(mvcRouterService.getCategoryUrl(), data).then(function (result) {
        return result.data;
      });
    }
   };
 }]);

我还发现了几个链接,讨论的问题似乎与此类似:

https://github.com/ivpusic/angular-cookie/issues/28

但这些都是一年前的,现在已经合并了修复。

另外,如果我从 @ 部分复制并粘贴任何这些 url,它们都会在浏览器中解析,如果这很重要的话

我取消了所有文件的最小化并获得了更准确的堆栈跟踪,但仍然无法找出可能导致此问题的原因:

"Error: malformed URI sequence
Browser/self.cookies@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:4811:33
sendReq@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:8813:1
$http/serverRequest@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:8539:25
processQueue@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:12078:25
scheduleProcessQueue/<@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:12094:36
 $RootScopeProvider/this.$get</Scope.prototype.$eval@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:13278:25
$RootScopeProvider/this.$get</Scope.prototype.$digest@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:13090:37
$RootScopeProvider/this.$get</Scope.prototype.$apply@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:13382:33
bootstrapApply@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:1494:20
invoke@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:4101:17
bootstrap/doBootstrap@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:1493:25
bootstrap@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:1512:13
angularInit@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:1406:45
@https://controlpanel.abc.com/Scripts/angular/dist/angular.js:24416:9

【问题讨论】:

    标签: asp.net-mvc angularjs


    【解决方案1】:

    如果有人好奇,我在 Angular 代码中添加了一个 try catch 到它出错的地方,并 ajaxed 错误以尝试追踪更具体的错误。我最终发现格式错误的 cookie 是我们一些用户电脑上的谷歌分析 cookie。不知道为什么 Angular 无法处理错误。这是_utmz cookie

    https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-30
      • 2015-01-23
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2013-11-15
      相关资源
      最近更新 更多