Problema de rutas de área MVC de ASP NET/Rutas múltiples en VB
-
30-10-2019 - |
Pregunta
Estoy bastante inexperto con .NET y acabo de comenzar a aprender MVC. He llegado a un problema sobre múltiples controladores que se encuentran:
"Se encontraron múltiples tipos que coinciden con el controlador llamado 'revisiones'. Esto puede suceder si la ruta que atiende esta solicitud ('{controlador}/{acción}/{id}') no especifica espacios de nombres para buscar un controlador que coincida La solicitud. Si este es el caso, registre esta ruta llamando a una sobrecarga del método 'Maproute' que toma un parámetro de 'espacios de nombres' ".
Recientemente agregué un nuevo área de "administrador" a mi aplicación y dentro de eso tengo un "ReviewController". También hay un "ReviewController" dentro de la carpeta de aplicaciones principales:
Ah - Como nuevo usuario, no puedo publicar una imagen, pero básicamente tengo un "ReviewController" en "Controladores" y en "Áreas/Admin/Convolers".
Tengo 2 rutas configuradas hasta ahora:
Ruta predeterminada en global.asax.vb
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
{"PowellCasting/Controllers"}
)
End Sub
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
System.Data.Entity.Database.SetInitializer(New System.Data.Entity.DropCreateDatabaseIfModelChanges(Of Models.PowellCastingEntites))
Database.SetInitializer(Of PowellCastingEntites)(New PowellCastingInitializer())
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers")
End Sub
Ruta de área en administración de administración
Namespace PowellCasting.Areas.Admin
Public Class AdminAreaRegistration
Inherits AreaRegistration
Public Overrides ReadOnly Property AreaName() As String
Get
Return "Admin"
End Get
End Property
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.Controller = "Dashboard", .action = "Index", .id = UrlParameter.Optional}
)
End Sub
End Class
End Namespace
Después de leer los problemas que estaba teniendo, he agregado varios bits de código:
Mis controladores de administración tienen el espacio de nombres correcto definido
- Espacio de nombres powellcasting.areas.admin en lugar de simplemente powellcasting.
- Tengo registroalLareas establecido en el global
- ControllerBuilder.Current.DefaultNamespaces.Add ("Powellcasting/Controllers") está en su lugar para especificar la ruta predeterminada.
El problema específico que tengo ahora es que cuando voy a "/revisiones" obtengo el error de controladores múltiples que se muestran arriba, específicamente:
*La solicitud de 'revisiones' ha encontrado los siguientes controladores de correspondencia: Powellcasting.Powellcasting.Areas.admin.ReviewScontroller
Powellcasting.Powellcasting.ReviewScontroller*
He habilitado el depurador de ruta y eso solo muestra un partido:
Ah - Como nuevo usuario, no puedo publicar una imagen, pero muestra:
Admin/{controlador}/{acción}/{id} como falso
y
{controlador}/{acción}/{id} como verdadero
Esto es como se esperaba, así que no sé por qué estoy recibiendo el problema.
He leído sobre la sobrecarga del método Maproute con el espacio de nombres, pero no pude encontrar un ejemplo en VB (cargas en C#). Pero probé esto:
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute( _
"Admin_default", _
"Admin/{controller}/{action}/{id}", _
New With {.Controller = "Dashboard", .action = "Index", .id = UrlParameter.Optional}, _
vbNull,
{"PowellCasting/Areas/Admin/Controllers"}
)
End Sub
y
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}, _
vbNull,
{"PowellCasting/Controllers"}
)
End Sub
pero sin éxito.
Estoy seguro de que esto debería ser sencillo y he probado varias cosas, es muy frustrante. Cualquier ayuda sería realmente apreciada.
Mi primera publicación aquí - ¡Hola! :)
No hay solución correcta