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控制器中发送的请求,或者在Razor视图中使用@Request.IsAuthenticated查看用户是否已登录,但是将此信息传递给我的角度应用程序的最佳方法是什么可以在用户首次登录时正确地将用户路由到登录页面,但如果他们在服务器上有活动会话,则跳过登录页面?
我试图解决这个问题的研究告诉我,我可能需要创建一个角度服务来存储关于用户是否经过身份验证的布尔值.然后,我需要添加一些代码来使用$routeChangeStart检查每个路由的此服务,并仅在必要时重定向到登录页面.我看了很多例子,但是在我自己的应用程序的上下文中不能完全把它们放在一起.
有人可以帮我点点滴滴吗?
我创建了一个包含布局的指令“appWrapper”.在其中有一个具有ng-view的部分.
该指令使用控制器AuthCtrl,此控制器使用服务AuthService.
因此,我可以访问整个html中此控制器内的所有内容.例如,我可以在侧边栏的项目中说ng-click =“vm.logout()”.
这个“AuthService”有一些可以被控制器调用的方法.登录并注销其中2个.
当我执行登录时,我设置了一些cookie,其中包含我从控制器返回的一些信息.
当我退出时,我删除了这些cookie.
在我的路由所在的app.js上,我最后在运行结束时检查这些cookie,每次更改位置(url)时都会检查这些cookie.如果它们存在,则允许用户继续.如果没有,它会将用户重定向到登录名.
它有帮助吗?如果需要,我可以发布代码供您使用.
无需在控制器内创建操作来检查此操作.它需要您的应用程序转到服务器,返回浏览器,返回服务器并返回浏览器以执行用户执行的每个操作.这个不好.