最初に、私は nop/mvc を初めて使用することを覚えておいてください。最善を尽くしても、この一見単純なタスクの解決策を見つけることができません。
作成中のプラグインのカスタム ルートを定義してきましたが、これまでのところ問題なく動作しています。私が定義したルートは問題なく動作しました (たとえば、「/Dealerlocator」と「Dealer/List」のルートを設定しました)
この問題は、「/Admin」用に定義されたエリアが既に存在するという事実に起因するため、「Admin/Dealer」などのカスタム ルートを設定しようとすると、自分のルートがカスタムルートではなく、エリアルートが使用する名前空間とは異なる名前空間にあるため、コントローラーに到達しないようで、「リソースが見つかりません」というエラーが表示されます。
だから私がしたいのは、「管理者/ディーラー」に行くと、この1つの原因でエリアに設定されたルートを無視し、RouteProvider クラスで定義したルートを使用することです。
DataTokens を使用すると、この問題が解決することが提案されました。しかし、私はそれらを働かせることができません。
私のプラグインルーティングコード:
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
var route = routes.MapRoute(
"Nop.Plugin.Misc.DealersAdmin",
"Admin/Dealer",
new { controller = "DealerAdmin", action = "Index" },
new[] { "Nop.Plugin.Misc.Dealers.Controllers" }
);
route.DataTokens.Add("Area", "Admin");
}
}
Nopcommerce の管理エリアのルーティング:
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", area = "Admin", id = "" },
new[] { "Nop.Admin.Controllers" }
);
}
}
コントローラーの名前が「ディーラー」の場合、エリア登録の条件が一致しないように設定してみましたが、うまくいくようです。しかし、コア nop フレームワークの一部であるため、AdminAreaRegistration クラスを変更することはできません。RouteProvider クラスですべての作業が行われることを確認したいと思います。私のルートの優先順位を高く設定して、それが最初に解決されるようにする方法があるのではないでしょうか? ありがとう。