2009-08-20 3 views
0

모든 컨트롤러 작업 메서드에 적절한 사용자 지정 특성이 표시되어 있다고 주장하기 위해 일부 단위 테스트를 작성하고 있지만 공용 메서드가 MVC 작업으로 작동 할 수 있는지 여부를 결정하기위한 기준이 무엇인지 알지 못합니다.ASP.NET MVC : 컨트롤러의 메소드가 액션이되는 기준은 무엇입니까?

기준은 반환 값 유형 (ActionResult 또는 파생이어야 함) 일 수 있다고 가정합니다. 사실입니까? 정적 메서드는 어떻습니까?

답변

5

은 다음과 같은 기준을 충족해야합니다 :

  • 그것은 public해야하고하지 static
  • 그것은 배제하기 위해 "특별한"이름이 안 생성자, 이벤트 등
  • .ToString() 및 패밀리를 제외하기 위해 System.Web.Mvc.Controller 또는 다른 기본 클래스에 정의하면 안됩니다.

일반 메서드는 예외를 throw하지만 어떤 이유로 인해 are 동작을 고려했습니다. 반환 유형은 반드시 사용자가 반환 할 수 있으므로 ActionResult 일 필요는 없습니다. 텍스트 데이터의 경우 입니다.

+0

세 번째 포인트는 내가 찾던 것입니다 : 나는하지 않았다 Dispose() 등의 메소드로 무엇을해야하는지 알 수 있습니다.감사합니다. –

+0

액션 메소드에 [NonAction] 속성을 적용하면 매우 까다로워집니다. 그렇지 않으면 조치 메소드 인 것처럼 보이는 공용 메소드는 기본 비헤이비어를 대체하는 속성을 가질 수 있습니다. – Eilon

1

컨트롤러의 모든 공용 메소드는 액션으로 처리됩니다. 심지어 문자열을 반환하는 액션도 있습니다. 메소드가 동작을 고려하려면

+0

아파트) – UpTheCreek

1

컨트롤러에서 실제 작업 목록을 결정하는 것은 까다로운 문제입니다. 유일한 정답은 그것이 "의존"한다는 것입니다! Saulius가 준리스트는 꽤 정확합니다. - 기본 ControllerActionInvoker를 사용한다면 물론 대부분의 사람들이 사용합니다.

논리를 복제하지 않으려면 ControllerActionInvoker 자체를 사용하여 작업 목록을 가져온 다음 반환되는 목록의 내용을 확인하는 것이 좋습니다.

GetControllerDescriptor() 메서드를 호출 할 수 있도록 ControllerActionInvoker에서 파생 된 클래스를 작성해야합니다. 이 메소드의 반환 값은 ControllerDescriptor이며 컨트롤러 설명 자입니다. 그런 다음 ActionDescriptors 목록을 반환하는 GetCanonicalActions()를 호출 할 수 있습니다. 이들 항목 각각은 일반적으로 무엇이 행동 하는지를 나타냅니다.

  • 는 컨트롤러가있는 ControllerContext 인스턴스를 작성 사용자 정의 호출자의 인스턴스로

    1. 세트의 ActionInvoker 속성을 컨트롤러를 인스턴스화 :

      은 당신이하는 것이 필요합니다 모두를 연결하려면 컨트롤러에 인스턴스가 설정되었습니다.

    2. 호출자가 GetControllerDescriptor()를 호출하는 새 public 메서드를 호출합니다.

    그런 다음 결과를 확인하면 완료됩니다!

    물론

    는,이 중 하나를 시도했지만하지 않은 이론의 모든 작품 :)

    사울 리우스에 의해 언급 된 것과
  • 관련 문제