2017-09-13 5 views
-3

네임 스페이스 별 차별화는 타사 라이브러리가있는 경우에만 사용해야하며 우리가 작성한 클래스를 차별화하지 않아야합니까?C# 및 네임 스페이스

Web Api에서 컨트롤러와 작업 이름이 동일하지만 네임 스페이스가 다른 경우 라우팅이 수행되지 않고 404 오류가 발생합니다. 나는 이것을 극복하기 위해 커스텀 컨트롤러 셀렉터를 사용할 수 있다는 것을 알았지 만 내장 된 셀렉터가 그것을 무시하기 때문에 이것은 의도적 인 디자인 결정인지 궁금하다. 네임 스페이스에서만 차별화를 피해야하는 이유가 있습니까?

+2

예, 동일한 항목은 (사람이) 서로 혼동하는 경향이 있습니다. – Amy

+0

두 가지 (예 : 컨트롤러)가 같은 것으로 불려지지만 다른 네임 스페이스에있는 것이 @JohnL 인 ** 이점 **을 통해 이야기 할 수 있습니까? – mjwills

+3

첫 직장에서 나는 다른 3 명의 에이미와 함께 일했다. PA 시스템을 통해 전화가 올 때마다 우리 모두 네 명이 프론트 데스크에 나타납니다. 결국 우리는 우리를 차별화하기 위해 서로에게 별명 (나는 스쿠터)을 주었다. 이런 일이 당신의 코드에서 일어나지 않게하십시오. 고유 한 이름을 부여하고 이름 공간을 사용하여 논리적으로 구성하십시오. – Amy

답변

2

ASP.NET MVC/WebApi에서 경로는 Controller의 이름에서 자동으로 결정됩니다. 따라서 동일한 이름을 가진 두 개의 Controller이 있고 RouteAttribute의 경로를 덮어 쓰지 않으면 동일한 경로를 공유합니다.

는이 문제를 해결할 수있는 두 가지 방법이 있습니다

  1. 사용 Areas : 지역 여러 MVCs, (일반적으로 인증/권한 부여 규칙에 의해 분리 된) 특정 섹션 각각에 응용 프로그램을 분리하기위한 것입니다. 이과 같습니다

  2. 조회수
  3. 모델
  4. 관리
    • 컨트롤러

      • 공공
        • 컨트롤러
        • 조회수
        • 모델
    • 오버라이드 route 컨트롤러는 (안된하지만, 확실하지 작동 할 경우)을 사용하는 것이 :

      [Route("MyHome")] 
      public class HomeController : Controller 
      { 
      } 
      
      [Route("MySecondHome")] 
      public class HomeController : ApiController 
      { 
      } 
      

또한 알 그 RouteAttribute에 대한 작동하려면 먼저 활성화해야합니다. 자세한 내용은 here을 참조하십시오.

public static void Register(HttpConfiguration config) 
{ 
    // Attribute routing. 
    config.MapHttpAttributeRoutes(); 

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

그러나 상관없이 네임 스페이스 구조, 같은 이름을 가진 클래스를 사용하지 않는 시도해야. 그것은 정확하게 당신이 상대하고있는 것을 인식하는 것을 더 어렵게 만듭니다.

+0

OP의 질문에 맞을 것으로 생각합니다. 예제 컨트롤러 중 하나는 'ApiController'여야합니다.속성 라우팅이 활성화되면'Route'가 작동합니다. – Amy

+0

@Amy 웹 API 2가'ApiController'를 사용한다는 것을 잊었습니다. (지금 당분간 ASP.NET 코어를 사용해 왔습니다.) 답변 됨 updated –

+1

나는 그것이 사실 일 것으로 예상했다. 여기 같은거야. – Amy