我对 .net 非常缺乏经验,并且刚刚开始学习 MVC。我遇到了一个关于找到多个控制器的问题:
“找到了与名为‘reviews’的控制器匹配的多种类型。如果为该请求提供服务的路由 (‘{controller}/{action}/{id}’) 未指定命名空间来搜索匹配的控制器,则可能会发生这种情况请求。如果是这种情况,请通过调用采用 'namespaces' 参数的 'MapRoute' 方法的重载来注册此路由。
我最近在我的应用程序中添加了一个新的“管理”区域,其中我有一个“ReviewController”。主应用程序文件夹中还有一个“ReviewController”:
啊 - 作为一个新用户,我不能发布图像,但基本上我在“控制器”和“区域/管理/控制者”中有一个“评论控制器”。
到目前为止,我设置了 2 条路线:
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
AdminAreaRegistration 中的区域路由
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
在阅读了我遇到的问题之后,我添加了一些代码:
我的管理员控制器定义了正确的命名空间
- 命名空间 PowellCasting.Areas.Admin 而不是简单的 PowellCasting。
- 我在全局中设置了 RegisterAllAreas
- ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers") 用于指定默认路由。
我现在遇到的具体问题是,当我转到“/Reviews”时,我得到了上面显示的多个控制器错误,具体来说:
*“reviews”请求找到了以下匹配的控制器:PowellCasting.PowellCasting.Areas.Admin.ReviewsController
PowellCasting.PowellCasting.ReviewsController*
我已经启用了路由调试器,并且只显示了一个匹配项:
啊-作为新用户,我无法发布图片,但它显示:
Admin/{controller}/{action}/{id} 为 FALSE
和
{controller}/{action}/{id} 为 TRUE
这是预期的,所以我不知道为什么我会收到这个问题。
我已阅读有关使用命名空间重载 maproute 方法的信息,但在 VB 中找不到示例(在 c# 中加载)。但我试过这个:
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
和
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
但没有成功。
我确信这应该很简单,而且我已经尝试了很多事情——这非常令人沮丧。任何帮助将非常感激。
我在这里的第一篇文章-嗨!:)