현재 온라인으로 호스팅되는 두 개의 관련없는 MVC3 프로젝트가 있습니다.
하나는 잘 작동하고 다른 하나는 작동하지 않아 오류가 발생합니다.
‘Home’이라는 컨트롤러와 일치하는 여러 유형이 발견되었습니다. 이 요청을 처리하는 경로 ( ‘{controller} / {action} / {id}’)가 요청과 일치하는 컨트롤러를 검색 할 네임 스페이스를 지정하지 않은 경우 발생할 수 있습니다.
이 경우 ‘namespaces’매개 변수를 사용하는 ‘MapRoute’메서드의 오버로드를 호출하여이 경로를 등록하십시오.
내 호스트가 작동하는 방식은 FTP 액세스 권한을 부여하고 해당 폴더에는 각 응용 프로그램마다 하나씩 두 개의 다른 폴더가 있다는 것입니다.
ftpFolderA2 / foo.com
ftpFolderA2 / bar.com
foo.com은 정상적으로 작동하며 응용 프로그램을 로컬 파일 시스템에 게시 한 다음 FTP를 사용하여 작동합니다.
bar.com을 업로드하고 실행하려고하면 위의 문제가 발생하여 내 사이트를 사용하지 못하게됩니다. foo.com은 여전히 작동합니다 .
bar.com이 ftpFolderA2 내부의 모든 컨트롤러에서 검색하고 있는데 이것이 다른 것을 찾는 이유 HomeController
입니까? Controller 폴더 만 보도록하려면 어떻게해야합니까?
사리:
- 영역을 사용하지 않습니다. 이들은 완전히 관련이없는 두 프로젝트입니다. 게시 된 각 프로젝트를 각 해당 폴더에 배치합니다. 멋진 것은 없습니다.
- 각 프로젝트에는 1 개의 HomeController 만 있습니다.
누군가 이것이 이것이 문제인지 확인할 수 있습니까?
답변
이 오류 메시지 는 영역을 사용하고 해당 영역과 루트 내에 동일한 컨트롤러 이름 이있을 때 종종 발생 합니다. 예를 들어 두 가지가 있습니다.
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
오류 메시지에서 알 수 있듯이이 문제를 해결하기 위해 경로를 선언 할 때 네임 스페이스를 사용할 수 있습니다. 따라서 주요 경로 정의에서 Global.asax
:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "AppName.Controllers" }
);
그리고 당신의 ~/Areas/Admin/AdminAreaRegistration.cs
:
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "AppName.Areas.Admin.Controllers" }
);
영역을 사용하지 않으면 두 응용 프로그램이 동일한 ASP.NET 응용 프로그램 내에서 호스팅되고 서로 다른 네임 스페이스에 동일한 컨트롤러가 정의되어 있기 때문에 충돌이 발생하는 것 같습니다. 이러한 종류의 충돌을 피하려면 IIS를 구성하여이 두 가지를 별도의 ASP.NET 응용 프로그램으로 호스팅해야합니다. 서버에 액세스 할 수없는 경우 호스팅 제공 업체에 문의하십시오.
답변
이 오류가 발생할 수있는 또 다른 시나리오는 다음과 같습니다. 어셈블리의 파일 이름이 변경되도록 프로젝트의 이름을 바꾸면 두 가지 버전의 ASP.NET 어셈블리가있을 수 있으며이 오류가 재현됩니다.
해결책은 bin
폴더 로 이동 하여 이전 dll을 삭제하는 것입니다. ( “Rebuild Project”를 시도했지만 삭제하지 않았으므로 bin
사라 졌는지 확인하십시오. )
답변
MVC4 및 MVC5에서는 조금 다릅니다. 다음을 사용하십시오.
/App_Start/RouteConfig.cs
namespace MyNamespace
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] {"MyNamespace.Controllers"}
);
}
}
}
그리고 지역에서
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "MyNamespace.Areas.Admin.Controllers" }
);
답변
이것을보십시오 … http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
그런 다음이 그림 (내 그림처럼 u를 희망)
답변
다른 사람들이 말한 것은 올바르지 만 여전히 같은 문제에 직면하는 사람들을 위해 :
나는 다른 프로젝트를 복사하기 때문에 내 경우에 무슨 일이 있었 N 뭔가에 이름 하지만 에 이전 출력 파일 bin
불행하게도, 타격 폴더 여전히 있었다 … 그리고 Build -> Clean Solution
이름을 바꾼 후 프로젝트와 그것으로 Namespaces
제거되지 않습니다 … 그래서 수동으로 삭제 하면 내 문제가 해결되었습니다!
답변
프로젝트 bin/
폴더에
PROJECT_PACKAGENAME.DLL 만 가지고 있는지 확인하십시오
ANOTHER_PROJECT_PACKAGENAME.DLL을 제거 하십시오.
실수로 여기에 표시되거나 프로젝트 이름을 바꿉니다.
답변
homeController 클래스와 충돌 할 수있는 다른 dll 파일이 있으면 bin 폴더를 확인하십시오 .