내 ASP.NET MVC 3 프로젝트에서 다음 오류가 발생합니다.
‘Home’이라는 컨트롤러와 일치하는 여러 유형이 발견되었습니다. 이 요청을 서비스하는 경로 ( ‘Home / {action} / {id}’)가 요청과 일치하는 컨트롤러를 검색하기위한 네임 스페이스를 지정하지 않는 경우에 발생할 수 있습니다. 이 경우 ‘namespaces’매개 변수를 사용하는 ‘MapRoute’메소드의 오버로드를 호출하여이 경로를 등록하십시오.
‘Home’에 대한 요청에서 일치하는 컨트롤러 MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController를 찾았습니다.
기본 컨트롤러 폴더에 클래스 이름이 MyCompany.MyProject.WebMvc.Controllers.HomeController 인 HomeController가 있습니다.
내 global.asax의 RegisterRoutes 메서드는 다음과 같습니다.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
그런 다음 Company라는 영역이 있고 해당 영역의 기본 컨트롤러 폴더에 HomeController가 있고 클래스 이름은 MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController입니다.
CompanyAreaRegistration 파일의 RegisterArea 메서드는 다음과 같습니다.
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
이 모든 것이이 게시물의 시작 부분에서 강조한 오류의 원인입니다. 나는 운이없는 다양한 다른 게시물의 솔루션을 모 으려고 고군분투하고 있습니다.
기본 컨트롤러 폴더에 HomeController가 있고 각 영역에 하나가있을 수 있습니까? 그렇다면이 작업을 수행하려면 내 구성 파일을 변경해야합니까?
어떤 도움이라도 대단히 감사하겠습니다!
답변
오류 메시지에는 권장 솔루션이 포함되어 있습니다. “이 경우 ‘namespaces’매개 변수를 사용하는 ‘MapRoute’메소드의 오버로드를 호출하여이 경로를 등록하십시오.”
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "MyCompany.MyProject.WebMvc.Controllers"}
);
이렇게하면 http : // server / 가 HomeController의 인덱스 작업으로 이동합니다. http : // server / company / home 은 영역 등록에 정의 된대로 회사 영역의 HomeController의 인덱스 작업으로 이동합니다.
답변
이것은 asp.net mvc4 접근 방식입니다.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "RegisterNow", id = UrlParameter.Optional },
namespaces: new[] { "YourCompany.Controllers" }
);
답변
이름 공간의 이름을 변경 했으므로 bin 및 obj 폴더 만 삭제 하고 다시 작성 하고 다시 작업합니다.
답변
답변
이것을 사용하십시오
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "ProjectName.Controllers" }
);
답변
프로젝트 이름 만 사용하십시오.
Public Class RouteConfig
Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
routes.MapRoute( _
name:="Default", _
url:="{controller}/{action}/{id}", _
defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
, namespaces:={"MvcAreas"})
End Sub
답변
RazorGenerator를 사용하는 경우 namespaces
매개 변수를 알리는 것만 으로는 충분하지 않을 수 있습니다.
아래에 표시된 문을 추가하여 해결해야합니다 Global.asax.cs
.
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.Controllers"); // This one
}
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)