【问题标题】:Durandal and ASP.Net - Interrupting the routingDurandal 和 ASP.Net - 中断路由
【发布时间】:2015-01-06 17:40:32
【问题描述】:

我在一个运行良好的 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;
});

【问题讨论】:

    标签: asp.net durandal-2.0


    【解决方案1】:

    是的,这是可能的。看看canActivatehere。您可以在 canActivate 处理程序中返回一个承诺,并异步获取您的授权配置文件。获得授权配置文件后,您可以相应地使用 true 或 false 解析您的 canActivate。这就是我们所做的。

    此外,Durandal 中的路由是客户端的,而不是服务器端的。或者您是否正在使用 Razor 进行服务器端渲染?如果没有,那么您唯一需要访问服务器的时间基本上就是获取数据,通常是通过 RESTful Web API(尽管您也可以使用基于操作的路由来做到这一点)。

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

    【讨论】:

    • 谢谢,我去看看。我在客户端使用 jQuery、Knockout 等,并使用你所说的 Web Api 来满足任何数据要求,因此我希望可以在此函数期间进行 ajax 调用并相应地更改承诺。
    • 出于兴趣,Durandal 在虚假退货的情况下会怎么做?即 canActivate 没有
    • 它根本没有路由。顺便说一句,我认为你的评论被截断了:我有“即 canActivate 不是”,就是这样。
    • 那么这个函数可以用来路由其他地方吗?碰巧让用户明白时,我需要通知或其他东西。
    • 另一种选择是使用guardRoute。您可以拦截路由,通过对服务器的 ajax 调用进行验证,然后根据结果,继续或中止导航并显示消息。 durandaljs.com/documentation/api.html#class/Router/method/…
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多