gpt4 book ai didi

asp.net-mvc-4 - 带有两个 MVC Controller 的 SPA

转载 作者:行者123 更新时间:2023-12-03 22:19:41 27 4
gpt4 key购买 nike

按照 John Papa 的类(class),我正在构建一个 SPA,并试图确保用户仅在 Facebook/Google+ 身份验证后才能访问 SPA。为此,我有两个 MCV Controller ,默认和着陆 Controller 称为 Home/Index,这仅显示带有 FB/G+ 登录按钮的介绍屏幕。使用后,单击其中一个按钮并验证用户身份,然后将转到第二个 Controller ,该 Controller 是实际的 SPA 页面,具有 id=applicationHost 的 div 以及 shell 加载和 SPA 开始的位置。

我正在使用以下路线 JSON 数组来映射我的路线

var routes = [{
url: 'snaps',
moduleId: 'viewmodels/snaps',
name: 'Snaps',
visible: true
},{
url: 'places',
moduleId: 'viewmodels/places',
name: 'Places',
visible: true
}];

但是当我调用 router.map(config.routes) 然后调用 router.activate('snaps')

路由器在整个应用的根目录中寻找snaps路由

它尝试加载的 url 类似于 'localhost:XXXX/Home/#'

结果我从 Sammy 那里收到了 404 错误。

当我手动加载转到“localhost:XXXX/SPA/Snaps/#时,我的 View 没有问题。

如何让路由器在 SPA MVC Controller 而不是“Home” Controller 中查找路由“snap”和“place”。

我所做的所有这一切只是为了确保在让人们进入 SPA 之前让他们通过身份验证,因此如果有一种方法可以在 SPA View 本身中进行身份验证,那么我基本上已经避免了这个问题。如果我的上述问题没有答案,至少有人可以阐明我如何在 SPA View 中进行用户身份验证,那也很好。

提前致谢

最佳答案

一种解决方法是将 SPA Controller 设置为默认 Controller 。沿着这些线的东西:

System.Web.Routing.RouteTable.Routes.MapRoute(
name: "SPA",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "SPA",
action = "Index",
id = UrlParameter.Optional
}
);

确保它是第一个被映射的 MVC 路由。

然后...在您的 web.config 中,您可以将 loginUrl 设置为 Landing Controller。

<authentication mode="Forms">
<forms loginUrl="~/Home/Index" timeout="2880" />
</authentication>

然后.. 使用 Authorize 属性装饰您的 SPA Controller 。所有对 SPA Controller 的未经身份验证的请求都将被重定向到 loginUrl,它指向您的 Landing Controller

关于asp.net-mvc-4 - 带有两个 MVC Controller 的 SPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com