18

エリアフォルダは次のようになります:

Areas 
    Admin
        Controllers
            UserController
            BranchController
            AdminHomeController

プロジェクトディレクトリは次のようになります。

Controller
    UserController
        GetAllUsers

エリアルート登録

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new { controller = "Branch|AdminHome|User" }
    );
}

プロジェクトルート登録

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "MyApp.Areas.Admin.Controllers" });
}

このようにルーティングするhttp://mydomain.com/User/GetAllUsersと、リソースが見つかりませんというエラー(404)が発生します。UserControllerをAreaに追加した後、このエラーが発生します。

このエラーを修正するにはどうすればよいですか?

ありがとう...

4

2 に答える 2

33

コントローラの名前空間を台無しにしました。

主なルート定義は次のとおりです。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new string[] { "MyApp.Controllers" }
);

また、管理エリアのルート登録は次のようになります。

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new { controller = "Branch|AdminHome|User" },
        new[] { "MyApp.Areas.Admin.Controllers" }
    );
}

正しい名前空間がどのように使用されるかに注意してください。

于 2013-03-25T13:43:38.020 に答える
4

ASP.NETCoreMVCの最新のソリューション。

[Area("Products")]
public class HomeController : Controller

ソース:https ://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas

于 2018-03-11T22:44:34.947 に答える