[英]SPA with two MVC controllers
按照John Papa的課程,我正在建立一個SPA,並試圖確保用戶只有在Facebook / Google +身份驗證后才能進入SPA。 為此,我有兩個MCV控制器,默認和着陸控制器稱為Home / Index,這只顯示帶有FB / G +登錄按鈕的介紹屏幕。 一旦使用,單擊其中一個按鈕並驗證用戶然后被帶到第二個控制器,該控制器是實際的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')
路由器正在整個應用程序的根目錄中查找快照路由
它試圖加載的url就像'localhost:XXXX / Home / # '
結果我收到Sammy的404錯誤。
當我手動加載轉到'localhost:XXXX / SPA / Snaps /#我得到我的視圖沒有問題。
如何讓路由器在SPA MVC控制器而不是“Home”控制器中查找路徑“snap”和“place”。
所有這些我只是為了確保我讓人們在讓他們進入SPA之前進行身份驗證,所以如果有一種方法可以在SPA視圖本身之一進行身份驗證,那么我基本上避免了這個問題。 如果上面的問題沒有答案,至少如果有人可以說明如何在SPA視圖中進行用戶身份驗證,這也很好。
提前致謝
一種解決方法是將SPA控制器設置為默認控制器。 這些方面的東西:
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控制器。 所有未經身份驗證的SPA控制器請求都將重定向到loginUrl,loginUrl指向您的登陸控制器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.