簡體   English   中英

帶兩個MVC控制器的SPA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM