2014-05-21 13 views
0

Asp.net MVC (5)와 함께 Web Api (2)를 사용하여 인트라넷 웹 응용 프로그램을 구현하는 좋은 방법을 찾고 있습니다. 응용 프로그램은 클라이언트 측에서 AngularJS SPA를 사용하고 웹 응용 프로그램/웹 사이트로 웹 API를 사용하는 서버 측 MVC에서 사용하도록 설계되었습니다. MVC는 보안 권한에 따라 작업을 제한해야하기 때문입니다. 사용자에게 권한이없는 경우 MVC 컨트롤러를 호출 할 때 작업 버튼 (예 : 저장, 삭제 등)을 렌더링하지 않습니다. 다른 작업은Asp.Net MVC with Web Api

기본 아이디어는

MVC의 컨트롤러 (AngularJS와의 HTML 템플릿) 사용자가 권한이없는 경우 제거 작업 버튼을 사용하여 뷰를 생성하기위한 것입니다, 등 삭제, 저장하는 웹 API 방법을 사용하고 있습니다. 데이터 조작은 (AngularJS와 $ HTTP 서비스 웹 API 호출) 여기에 우리는 우리가 MVC와 웹 API 모두 활용할 수있는 인증 메커니즘을 도출 어떻게

질문 웹 API를 통해 무엇입니까? (인증 필터를 만들 수 있지만 MVC와 웹 API에 대해 별도의 필터를 만들어야합니다.)

일단 사용자가 인증되면 MVC 컨트롤러와 Web API 컨트롤러 모두에서이 정보를 어떻게 공유합니까? 각 js에서 각 사용자에게 요청 하시겠습니까?

인증을 위해 MVC와 WebApi 모두에 대해 ASP.Net 폼 인증을 사용할 수 있습니까? 그렇다면 어떻게해야합니까? 양식 authetication 토큰은 [authorize] 속성을 사용하여 자동으로 MVC 컨트롤러와 Web API 컨트롤러 모두에 대해 유효성을 검사합니까?

또한 알고 싶습니다. 단일 응용 프로그램에서 WebApi와 MVC를 섞어 사용하는 것이 좋은 방법입니까?

+0

그러면 내장 인증 (예 : 계정/역할을 가진 신원은'AuthorizeAttribute'을 사용합니까?)? –

+0

예, MVC 및 웹 API 용으로 별도로 처리해야하지만 그렇지 않습니까? –

+0

웹 API가 MVC 웹 사이트와 별도의 서버/프로젝트에 있습니까? –

답변

1

가능한 옵션이지만 권장되는 옵션은 아닙니다.

WebApi 동작 ApiController

및 MVC 컨트롤러 동작 상속되기 때문에 제어기는 클래스에서 상속한다. 당신은 API와 MVC 컨트롤러에 대한 경로를 정의하려면

는 당신은

응용 프로그램

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 } 
      ); 
    } 
    } 
시작에 Global.ascx이 같은 경로를 등록해야

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 } 
      ); 
     } 
    }