source

MVC3에서 다른 영역에서 동일한 컨트롤러 이름을 사용할 수 있습니까?

manysource 2023. 5. 25. 22:09

MVC3에서 다른 영역에서 동일한 컨트롤러 이름을 사용할 수 있습니까?

MVC3에는 다음 영역이 있습니다.

  • 모바일.
  • 샌드박스

그런 다음 지도를 다음과 같이 라우팅합니다.

    context.MapRoute(
        "Sandbox_default",
        "Sandbox/{controller}/{action}/{id}",
        new { controller = "SandboxHome", action = "Index", id = UrlParameter.Optional }

그리고.

    context.MapRoute(
        "Mobile_default",
        "Mobile/{controller}/{action}/{id}",
        new { controller = "MobileHome", action = "Index", id = UrlParameter.Optional }
    );

문제는 이것이 다음과 같은 URL을 제공한다는 것입니다.

http://localhost:58784/모바일/모바일 홈

그리고.

http://localhost:58784/샌드박스/샌드박스 홈

하지만 저는 이렇게 하길 원합니다.

http://localhost:58784/모바일/홈
http://localhost:58784/샌드박스/홈

문제는 Sandbox Home-Controller의 이름을 Home으로 변경할 때와 Mobile원하는 URL을 제공하는 Home-Controller to Home은 HomeController에 대한 클래스가 두 개라며 컴파일되지 않습니다.

다른 영역에서 동일한 컨트롤러 이름을 사용하려면 어떻게 해야 합니까?

네.

이 블로그 게시물에서 설명한 대로: http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx

Visual Studio에서 생성한 RegisterAllAreas 및 AreaRegistration 파일에 대한 호출이 있다고 가정합니다.충돌을 방지하기 위해 글로벌 ASAX의 기본 경로에 있는 네임스페이스만 사용하면 됩니다.

//Map routes for the main site. This specifies a namespace so that areas can have controllers with the same name
routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new[]{"MyProject.Web.Controllers"}
 );

영역 컨트롤러를 고유한 네임스페이스 내에 유지하는 한.이것은 효과가 있을 거예요.

예, 하지만 라우팅을 변경해야 합니다.

context.MapRoute(
    "Default",
    "{area}/{controller}/{action}/{id}",
    new { area = "Mobile", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

두 경로를 모두 유지할 수 있지만 정의하는 것을 잊지 마십시오.area당신의 채무 불이행 상태에서.

중요한

물론 컨트롤러를 고유한 영역 네임스페이스에 유지해야 합니다.

namespace MyApp.Areas.Mobile.Controllers
{
    public class HomeController : Controller
    {
        ...
    }
}

namespace MyApp.Areas.Sandbox.Controllers
{
    public class HomeController : Controller
    {
        ...
    }
}

MSDN에서 이 링크를 확인하고 진행 상황을 확인합니다.그리고 지역 등록에 대해 이야기하는 MSDN 기사도 잊지 마세요, 왜냐하면 당신은 전화를 해야 할 것이기 때문입니다.RegisterAllAreas()방법.

그리고 당신은 여전히 원래의 비영역 컨트롤러를 유지하고 싶기 때문에, 당신은 이 Phil Hack의 기사를 읽어야 합니다. (Credit은 먼저 이 블로그 게시물을 가리키는 답변의 @Rob에게 가야 합니다.)

언급URL : https://stackoverflow.com/questions/5065422/is-it-possible-in-mvc3-to-have-the-same-controller-name-in-different-areas