2014-05-21 141 views
0

我正在尋找一種使用Web Api(2)與Asp.net MVC(5)實現Intranet Web應用程序的好方法。 應用程序的設計方式是我們在客戶端使用AngularJS SPA,在服務器端MVC使用Web Api作爲單個應用程序/網站。 MVC是因爲我們必須根據安全權限限制操作。如果用戶沒有權限,我們在視圖調用MVC控制器時不會渲染操作按鈕(例如保存,刪除等)。其他操作都在利用網絡API的方式來保存,刪除等,與Web Api的Asp.Net MVC

基本思路是

MVC控制器是用於生成與如果用戶沒有權限刪除操作按鈕的觀點(HTML模板AngularJS)。 數據操作是通過Web API(AngularJS $ HTTP服務的Web API調用)這裏

我們如何推導,我們可以利用兩個MVC和Web API認證機制

問題?我們可以創建認證過濾器,但我們必須爲MVC和Web API創建單獨的過濾器,對吧?)

一旦用戶通過身份驗證,我們如何與MVC控制器和Web Api控制器共享此信息,而不是驗證用戶從角js的每個請求?

是否有可能使用ASP.Net表單身份驗證MVC和WebApi進行身份驗證?如果是這樣,我們該怎麼做? Will形式認證令牌是否使用[authorize]屬性自動驗證MVC控制器和Web Api控制器?

另外我想知道,在單個應用程序中混合使用MVC和WebApi的好方法是什麼?

+0

因此,您不想使用內置身份驗證(例如,與帳戶/角色身份然後使用'AuthorizeAttribute')? –

+0

是的,我們可以但我們需要分別處理MVC和Web API,對吧? –

+0

您的Web API是否與MVC網站不同的服務器/項目? –

回答

1

它是一個可行的選項,但不是推薦的選項。

由於的WebAPI操作將從ApiController

和MVC控制器動作被繼承將從控制器類繼承來。

如果要定義API和MVC控制器的路線,那麼你需要註冊在Global.ascx這樣的路線

應用程序啓動

GlobalConfiguration.Configure(WebApiConfig.Register); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 

RouteConfig類

public static class RouteConfig 
     { 
      public static void RegisterRoutes(RouteCollection routes) 
      { 

    ..... 
    .... 
routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
    } 
    } 

WebApiConfig類

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // TODO: Add any additional configuration code. 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 
      config.Formatters.XmlFormatter.UseXmlSerializer = true; 

      config.MessageHandlers.Add(new YourMessageHandlers()); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
    }