杜兰达尔和 ASP.Net - 中断路由



我正在一个运行良好的 asp.net 应用程序中使用Durandal。 我想实现的是将一些东西放入它的路由中,以便如果需要,我可以停止当前路由并重定向。

这样做的原因是我想基于权限的一些路由,其中权限存储在数据库中。 因此,在路由期间,我想检查路由,相应地使用 web api 来检查他们是否可以访问该路由并重定向(如果是),或者使用视图模型上的方法来检查这一点并相应地重定向。 我确实在视图模型上使用激活功能,我想知道是否可以将路线重定向到这里?

以前有人这样做过吗?

编辑:在下面的精彩答案之后,以下是我最终在测试路线上使用的代码,以使其正常工作。 Web api 函数 HasAccessToRoute 部分返回一个布尔值:

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。 您可以在canActivate处理程序中返回承诺,并异步获取授权配置文件。 获得授权配置文件后,您可以相应地使用 true 或 false 解析canActivate。 这就是我们所做的。

此外,杜兰达尔中的路由是客户端的,而不是服务器端的。 或者你是在用Razor做服务器端渲染吗? 如果没有,那么从本质上讲,您唯一要去服务器的时间就是获取数据,通常是通过 RESTful Web API(尽管您也可以使用基于操作的路由执行此操作)。

这一点很重要,因为canActivate是客户端处理程序。

最新更新