直接在浏览器的网址栏中输入网址时,我的角度路线出现问题。
这是怎么回事。当我的应用程序加载时,我调用一个MVC控制器,它加载一个MVC视图,其中包含一个ng-view。然后这又加载我的主要角度视图。这非常有效。然后我选择一些选项并单击“保存”,然后将我路由到我的成功视图。 (Angular很好地照顾了这一点)。但是,当我尝试直接进入我的成功视图时,我从服务器返回404错误。
现在我知道这是因为MVC中没有一条路由可以解决这个问题,但是有一条路由应该重定向到我的主MVC索引视图,而后者又会加载我的角度应用程序。
routes.MapRoute(
name: "Settings",
url: "{controller}/{*catchall}",
defaults: new { controller = "Settings", action = "Index" }
);
现在我希望当我刷新一个页面时,这个控制器会被调用,它应该加载我的角度应用程序,角度路由接管并显示正确的视图,但这根本不会发生。
我的角度路线
parts of the URL omitted
angular.module('app', ['ngRoute', 'restangular']).config([
'$routeProvider', 'RestangularProvider', '$locationProvider', function ($routeProvider, RestangularProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider.
when('/**/**/**/settings', {
templateUrl: 'App/globalsettings/templates/globalsettings.html',
controller: 'globalsettingsCtrl'
}).
when('/**/**/**/success', {
templateUrl: 'App/globalsettings/templates/success.html',
}).
when('/**/**/**/error', {
templateUrl: 'App/globalsettings/templates/error.html',
}).
otherwise({ redirectTo: '/**/**/**/settings' });
RestangularProvider.setBaseUrl("api");
}
]);
在刷新页面或直接输入URL时,任何人都可以回答我的路由失败的原因。
答案 0 :(得分:0)
您的路线仍会从网址获取控制器。因此,如果您导航到/success
,则路由正在提取success
作为控制器名称。
您可以尝试重命名路线中的controller
段,这样控制器将始终获得默认值Settings
。例如,将路线定义为:
routes.MapRoute(
name: "Settings",
url: "{angularController}/{*catchall}",
defaults: new { controller = "Settings", action = "Index" }
);
您可以将该网址段重命名为对您更有意义的内容,只要它不是controller
。