【发布时间】:2016-08-23 04:47:34
【问题描述】:
我的项目使用 MVC 来交付我网站的初始标记
MVC 控制器超级简单:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
我在布局视图中有ng-app 标签、捆绑和@RenderBody:
<!DOCTYPE html>
<html ng-app="myAppName">
<head>
@Styles.Render("~/Content/css")
</head>
<body>
<div class="container body-content">
@RenderBody()
</div>
@Scripts.Render("~/bundles/aBundle")
</body>
</html>
我的索引视图被尽可能简单地剥离:
<ng-view></ng-view>
我的 Angular app.ts 文件如下所示:
module app {
var main = angular.module("myAppName", ["ngRoute", "breeze.angular"]);
main.config(routeConfig);
routeConfig.$inject = ["$routeProvider"];
function routeConfig($routeProvider: ng.route.IRouteProvider): void {
$routeProvider
.when("/home",
{
templateUrl: "app/views/homeView.html",
controller: "HomeController as vm"
})
.when("/itemDetail/:itemId",
{
templateUrl: "app/views/itemDetailView.html",
controller: "ItemDetailController as vm"
})
.when("/addItem",
{
templateUrl: "app/views/addItemView.html",
controller: "AddItemController as vm"
})
.when("/login",
{
templateUrl: "app/views/loginView.html",
controller: "LoginController as vm"
})
.otherwise("/home");
}
}
我可以检查用户在 MVC 控制器中发送的请求,或者使用 @Request.IsAuthenticated 在 Razor 视图中查看用户是否已登录,但是将此信息传递给我的 Angular 应用程序的最佳方式是什么?我可以在用户首次登录时正确地将用户路由到登录页面,但如果他们在服务器上有活动会话则跳过登录页面?
我为弄清楚这一点所做的研究向我表明,我可能需要创建一个角度服务来存储有关用户是否经过身份验证的布尔值。然后,我需要添加一些代码来检查每个使用$routeChangeStart 的路由的服务,并仅在必要时重定向到登录页面。我查看了许多示例,但无法在我自己的应用程序的上下文中将这些部分组合在一起。
有人可以帮我把这些点联系起来吗?
【问题讨论】:
-
您希望 Angular 调用您的 MVC 控制器来询问此信息!因此,您可以在
app.run(function () {})中调用一个服务,该服务调用一个控制器操作,该操作仅返回一个布尔值。 -
您可以做一些简单的事情,例如将适当的值存储在模板视图标记的隐藏字段中。您应该能够通过绑定到 $routeChangeStart 事件来测试您的“已登录”逻辑。
标签: angularjs asp.net-mvc