1

これは、コントローラーに関する ASP.NET MVC 4 プロジェクトのファイル構造です。

 |--Models
 |--Controllers
       |
       |--api
       |   |
       |   |--UsersController.cs  (MyProject.Controllers.API.UsersController.cs)
       |   |--PlacesController.cs (MyProject.Controllers.API.PlacesController.cs)
       |
       |--UsersController.cs  (MyProject.Controllers.ViewsControllers.UsersController.cs)
       |--PlacesController.cs  (MyProject.Controllers.ViewsControllers.PlacesController.cs)

名前空間 MyProject.Controllers.API の下のコントローラーはすべて JsonResult を返します 名前空間 MyProject.Controllers.ViewsControllers の
下のコントローラーはすべてビューを返します

私の RouteConfig.cs はこれです:

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/",
            defaults: new { controller = "Places", action = "List" },
            namespaces: new[] { "MyProject.Controllers.ViewsControllers" }
        );
    }

Web ブラウザーで に移動するとhttp://localhost/Places/List、コントローラーを使用するため、期待どおりにビューが返されます。MyProject.Controllers.PlacesControlller.cs

json コントローラ用の MapRoute を作成して、Web ブラウザで に移動したときにhttp://localhost/api/Places/SomeActionクラスが使用されるようにするにはどうすればよいMyProject.Controllers.API.PlacesController.csですか?

注: ASP.NET MVC の API 機能を使用したくない

私はこれを試しましたが、うまくいきません:

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

        routes.MapRoute(
            name: "ViewRoute",
            url: "{controller}/{action}/",
            namespaces: new[] { "MyProject.Controllers.ViewsControllers" }
        );

        routes.MapRoute(
            name: "APIRoute",
            url: "api/{controller}/{action}/",
            namespaces: new[] { "MyProject.Controllers.API" }
        );
    }
4

1 に答える 1

1

通常のコントローラー アクションを呼び出すには、既に行った次のようにルートを登録する必要があります。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "ViewRoute",
        url: "{controller}/{action}/",
        namespaces: new[] { "MyProject.Controllers.ViewsControllers" }
    );

APIコントローラーを呼び出すには、ルートクラスで次のメソッドを定義し、このメソッドをglobal.asax Application_Start()メソッドに登録します。

    public static void RegisterAPI(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
于 2014-08-13T06:01:14.960 に答える