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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top