2012-06-14 4 views
0

내가 근무하는 곳에서 우리는 WebForms를 사용하는 내부 웹 애플리케이션을위한 맞춤 보안/인증 메커니즘을 갖추고 있습니다. 이제 우리는 ASP.NET MVC 3에서 개발 중이며 Controller 클래스를 확장하여 WebForm의 Page 클래스처럼 지원합니다. 그런 다음이 파일을 사용자 정의 공유 DLL에 압축합니다.버전 의존성이없는 MVC 컨트롤러 클래스 확장하기

MVC의 향후 버전과의 호환성 측면에서 얼마나 안전한 지 알고 싶습니다. ASP.NET MVC 4.0이 내년에 나올 경우 ASP.NET MVC 3.0 컨트롤러 클래스를 참조하는 사용자 정의 컨트롤러 클래스가 MVC 4.0 앱에서 계속 작동합니까?

특정 MVC 버전에 관계없이 어떻게 든 Controller을 확장 할 수있는 방법이 있습니까? 이것의


아니 중복 :Extending Asp.NET MVC3 Controller Class

+0

네가 Mvc에 대한 언급이 없다면 주위에 'System.Web.Mvc'의 각 버전에 대한 공용 라이브러리를 업그레이드해야 할 것입니다 ... 매우 유용하지는 않습니다. – dotjoe

+0

그래서 모든 Mvc 버전에 대해 MySharedLibrary.Mvc3, MySharedLibrary.Mvc4, ...을 가져야합니다. – Meryovi

+0

그건 한 가지 방법 일 것입니다 ... 문제입니까? 다음 버전에 새로운 기능을 사용하려면 어떻게해야합니까? – dotjoe

답변

1

문제는 "Controller"클래스에서 상속 받아서 버전 특정 Sytem.Web.Mvc에 대한 참조를 먼저 추가해야합니다.

ASP.NET MVC의 각 버전에는 자체 DLL이 있습니다. MVC 4 프로젝트에서 ASP.NET MVC3 용으로 설계된 고객 DLL을 사용할 수 없습니다.

이제 Controller에서 제공하는 클래스를 만들고 ASP.NET MVC 프로젝트에 포함시킬 수 있습니다. 프로젝트 버전이 변경되면 프로젝트에 대한 참조가 있으므로 "Controller"에 대한 참조도 변경됩니다. 번역.

+0

ActionFilterAttributes에 대해 동일한 내용이 있다고 가정합니다. – Meryovi

+0

대부분 그렇습니다. 액션 필터를 삽입하거나 확장하려면 MVC DLL에 대한 참조가 필요합니다. 사소한 변경으로 MVC3에서 재사용 될 수있는 ASP.NET MVC2의 코드는 상당한 양이지만 직접 호환되지는 않았습니다. –

0

그렇진 당신이 요구하는지,하지만 당신은 사용자 지정 보안/인증 메커니즘을 사용하는 경우, 당신은 AuthorizeAttribute을 재정의하는 것이 더 낫다하는 모든 컨트롤러에 대한 액세스를 제어합니다.

사용자 지정 인증에도 많은 예제가 있습니다. 사용자 정의 컨트롤러에서 파생되면 잠재적 인 보안 문제가 발생하여 누군가 기본 클래스를 추가하는 것을 잊어 버릴 수 있습니다. 응용 프로그램 시작시 모든 컨트롤러에 AuthorizeAttribute를 적용하는 것이 일반적입니다. 이 방법에 대한 자세한 내용은

는, 특별히 아무것도 재정의해야하지 않는 한, 오히려 기본 클래스 자체를 확장보다 IController에 대한 확장 메서드로 다음을 구현할 수 있습니다, 보안과 관련이없는 공유 방법에 대한 here

참조 컨트롤러 기본 클래스에서.

+0

우리는 앱용으로 한 번 해보았으며 우리의 요구에 잘 부응했습니다. 우리는 단지 우리가 공유 한 DLL을 다른 응용 프로그램에 넣기를 원합니다. 또한 맞춤 속성을 구현했지만 모든 컨트롤러에서 일부 공유 메소드가 필요합니다. – Meryovi

+0

공유 메서드를 사용한 후에는 IController에 대한 확장 메서드를 작성하는 것이 더 좋은 방법 일 수 있습니다. 이렇게하면 사용자 정의 컨트롤러에서 파생 될 필요가 없지만 공유 방법은 계속 사용할 수 있습니다. – Richard

+0

이 경우 "System.Web.Mvc"를 가져 오지 않아도 되겠습니까? (따라서 버전 의존성이 있습니까?) – Meryovi

관련 문제