【发布时间】: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)) 所以不是这样。
我的代码没有使用decodeURIComponent、encodeURIComponent、角度路由服务、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