Durandal 和 ASP.Net - 中断路由
Durandal and ASP.Net - Interrupting the routing
我在 asp.net 应用程序中使用 Durandal,它运行良好。我想要实现的是将一些东西放入它的路由中,这样如果需要我可以停止当前路由并重定向。
这样做的原因是我想对一些权限存储在数据库中的路由进行权限管理。因此,在路由期间我想检查路由,相应地使用 web api 来检查他们是否有权访问该路由,如果可以则重定向,或者使用视图模型上的方法来检查它并相应地重定向。我确实在视图模型上使用了激活功能,我想知道是否可以将路由重定向到这里?
以前有人做过吗?
编辑:
按照下面的好答案,下面是我最终在测试路线上使用的代码,以使其正常工作。 Web api 函数 HasAccessToRoute 部分 returns a bool:
define(['durandal/http', 'plugins/router', 'knockout', 'durandal/app'], function (http, router, ko, app) {
function viewModel() {
var self = this;
self.canActivate = function () {
return http.ajaxRequest("get", "/api/route/hasaccesstoroute?route=test")
.done(function (result) {
if (!result) {
app.showMessage("Test area cannot be accessed");
}
});
};
}
var model = new viewModel();
return model;
});
是的,这是可能的。看看 canActivate
here。您可以 return 在您的 canActivate
处理程序中承诺并异步获取您的授权配置文件。获得授权配置文件后,您可以相应地用 true 或 false 解析 canActivate
。这就是我们所做的。
此外,Durandal 中的路由是客户端的,而不是服务器端的。或者您正在使用 Razor 进行服务器端渲染?如果没有,那么您唯一一次访问服务器,基本上就是获取数据,通常是通过 RESTful Web API(尽管您也可以使用基于操作的路由来执行此操作).
这一点很重要,因为 canActivate
是客户端处理程序。
我在 asp.net 应用程序中使用 Durandal,它运行良好。我想要实现的是将一些东西放入它的路由中,这样如果需要我可以停止当前路由并重定向。
这样做的原因是我想对一些权限存储在数据库中的路由进行权限管理。因此,在路由期间我想检查路由,相应地使用 web api 来检查他们是否有权访问该路由,如果可以则重定向,或者使用视图模型上的方法来检查它并相应地重定向。我确实在视图模型上使用了激活功能,我想知道是否可以将路由重定向到这里?
以前有人做过吗?
编辑: 按照下面的好答案,下面是我最终在测试路线上使用的代码,以使其正常工作。 Web api 函数 HasAccessToRoute 部分 returns a bool:
define(['durandal/http', 'plugins/router', 'knockout', 'durandal/app'], function (http, router, ko, app) {
function viewModel() {
var self = this;
self.canActivate = function () {
return http.ajaxRequest("get", "/api/route/hasaccesstoroute?route=test")
.done(function (result) {
if (!result) {
app.showMessage("Test area cannot be accessed");
}
});
};
}
var model = new viewModel();
return model;
});
是的,这是可能的。看看 canActivate
here。您可以 return 在您的 canActivate
处理程序中承诺并异步获取您的授权配置文件。获得授权配置文件后,您可以相应地用 true 或 false 解析 canActivate
。这就是我们所做的。
此外,Durandal 中的路由是客户端的,而不是服务器端的。或者您正在使用 Razor 进行服务器端渲染?如果没有,那么您唯一一次访问服务器,基本上就是获取数据,通常是通过 RESTful Web API(尽管您也可以使用基于操作的路由来执行此操作).
这一点很重要,因为 canActivate
是客户端处理程序。