Problem z wieloma kontrolerami o tej samej nazwie w moim projekcie
Napotkałem następujący błąd z moim ASP.NET projekt MVC 3:
Znaleziono wiele typów, które pasują kontroler o nazwie "Home". To może się, jeśli trasa, która obsługuje to request ('Home/{action}/{id}') robi nie określa przestrzeni nazw do wyszukiwania kontroler odpowiadający żądaniu. Jeśli tak jest, zarejestruj to trasa przez wywołanie przeciążenia Metoda "MapRoute", która zajmuje parametr 'przestrzenie nazw'.
Wniosek o "Home" znalazł następujące Kontrolery pasujące: MyCompany.MyProject.WebMvc.Kontrolery.HomeController MyCompany.MyProject.WebMvc.Miejsca.Towarzystwo.Kontrolery.HomeController
W domyślnym folderze kontrolera mam Kontroler HomeController o nazwie klasy MyCompany.MyProject.WebMvc.Kontrolery.HomeController.
Moja metoda RegisterRoutes, w moim globalnym.asax, wygląda jak:
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
);
}
Następnie mam obszar o nazwie Company, z Homecontrollerem w domyślnym folder kontrolera dla obszaru z nazwą klasy MyCompany.MyProject.WebMvc.Miejsca.Towarzystwo.Kontrolery.HomeController.
Metoda RegisterArea w pliku Companyaregistration wygląda następująco:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
To wszystko prowadzi do błędu, który podkreśliłem na początku tego postu. Walczę z próbami ułożenia rozwiązania z różnych innych postów, z bez powodzenia.
Czy możliwe jest posiadanie Homecontrollera w domyślnym folderze controllerów, a następnie po jednym w każdym obszarze? Jeśli tak, czy muszę wprowadzać (zakładając, że to zrobię) zmiany w moim pliku konfiguracyjnym, aby to działało?
Każda pomoc będzie mile widziana!8 answers
Komunikat o błędzie zawiera zalecane rozwiązanie: "jeśli tak jest, zarejestruj tę trasę, wywołując przeciążenie metody 'MapRoute', która pobiera parametr' przestrzenie nazw'."
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"}
);
To sprawi, że http://server / przejdź do akcji indeksu kontrolera Homecontrollera, która jest, jak sądzę, tym, czego chcesz. http://server/company/home przejdzie do akcji indeksu kontrolera HomeController obszaru firmy, zdefiniowanej w rejestracji obszaru.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-23 15:25:05
To jest asp.net podejście mvc4:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "RegisterNow", id = UrlParameter.Optional },
namespaces: new[] { "YourCompany.Controllers" }
);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 03:53:07
Zmieniłem nazwę przestrzeni nazw, więc tylko delete de folders bin i obj i rebuild , działają ponownie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 13:22:46
inną prawdopodobną przyczynę tego problemu można znaleźć poniżej:
Znaleziono wiele typów, które pasują do kontrolera o nazwie "Home"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:39
Użyj tego
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "ProjectName.Controllers" }
);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 07:55:10
Użyj tylko nazwy projektu:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 09:05:56
Jeśli używasz RazorGenerator, samo poinformowanie parametru namespaces
może nie wystarczyć.
Muszę rozwiązać dodanie wyrażenia oznaczonego poniżej w 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
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 05:04:13
Jak wspomina Chris Moschini, parametr przestrzeni nazw może nie wystarczyć, jeśli masz dwa obszary o tej samej nazwie kontrolera z różnymi przestrzeniami nazw, a domyślna trasa obszaru brak zwróci błąd serwera 500.
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"}
);
Najlepiej jest nadpisać domyślną obsługę trasy i dodać tę linię:
RequestContext.RouteData.DataTokens["UseNamespaceFallback"] = false;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 12:49:50