私は .net の経験がほとんどなく、MVC の学習を始めたばかりです。複数のコントローラーが見つかったという問題が発生しました。
「'reviews' という名前のコントローラーに一致する複数のタイプが見つかりました。これは、この要求 ('{controller}/{action}/{id}') を処理するルートが、一致するコントローラーを検索するための名前空間を指定していない場合に発生する可能性があります。この場合は、'namespaces' パラメーターを取る 'MapRoute' メソッドのオーバーロードを呼び出して、このルートを登録してください。"
最近、アプリに新しい「管理者」エリアを追加しました。その中に「ReviewController」があります。アプリのメイン フォルダ内には「ReviewController」もあります。
ああ - 新しいユーザーとして画像を投稿することはできませんが、基本的には "Controllers" と "Areas/Admin/Contollers" に "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 ではなく、名前空間 PowellCasting.Areas.Admin。
- グローバルに RegisterAllAreas を設定しました
- ControllerBuilder.Current.DefaultNamespaces.Add("PowellCasting/Controllers") は、デフォルト ルートを指定するために用意されています。
私が今抱えている特定の問題は、「/Reviews」に移動すると、上記の複数のコントローラーエラーが発生することです。具体的には次のとおりです。
*「レビュー」のリクエストで、次の一致するコントローラーが見つかりました: PowellCasting.PowellCasting.Areas.Admin.ReviewsController
PowellCasting.PowellCasting.ReviewsController*
ルート デバッガーを有効にしましたが、1 つの一致のみが表示されます。
ああ - 新しいユーザーとして画像を投稿することはできませんが、次のように表示されます。
Admin/{controller}/{action}/{id} as 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
しかし、成功しませんでした。
これは簡単なはずだと確信しており、多くのことを試しましたが、非常にイライラします。どんな助けでも本当に感謝しています。
ここでの私の最初の投稿 - こんにちは!:)