質問

HTMLビューにデフォルトのフォルダーコンベンションを使用するMVCアプリを使用できますが、XMLまたはJSONを返すWebサービスにのみ使用されるコントローラーを使用して、代替の「サービス」フォルダーを設定したいと思います。

したがって、ルート「/services/tasks/list」は「/services/taskservice.cs」にルーティングされ、「/tasks/list」は標準「/controllers/taskcontroller.cs」にルーティングされます。

ビューコントローラーとは別にサービスコントローラーを維持したいと思います。エリアや別のプロジェクトの使用が機能するとは思わない。これにアプローチするための最良の方法は何でしょうか?

役に立ちましたか?

解決

これをルーティングを使用して行うことができ、コントローラーを別々の名前空間に保持できます。 MapRouteでは、どの名前空間がルートに対応するかを指定できます。

このコントローラーを考慮してください

namespace CustomControllerFactory.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
           return new ContentResult("Controllers");
        }
    }
}

namespace CustomControllerFactory.ServiceControllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
           return new ContentResult("ServiceControllers");
        }
    }
}

そして、次のルーティング

 routes.MapRoute(
           "Services",
           "Services/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CustomControllerFactory.ServiceControllers" } // Namespace
        );


        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CustomControllerFactory.Controllers"} // Namespace
        );

次の回答を期待する必要があります

/サービス/ホーム

ServiceController

/家

コントローラー

他のヒント

IconTrollerFactoryを実装する独自のコントローラーファクトリーを作成する必要があります。

チェックアウト http://nayyeri.net/custom-controller-factory-in-asp-net-mvc 例として。

黄色のフォルダー名が表示されている場合は、ルートにフォルダ名を追加します

その後、routes.maprouteを「app_start> routeconfig」に変更する必要があります

デフォルトルートを変更します

routes.MapRoute(
          "Default",
          "{controller}/{action}/{id}",
          new { controller = "Home", action = "Index", id =     UrlParameter.Optional },
          new string[] { "mvcPartialView.HomeController" } // Namespace 
      );

これを追加します

routes.MapRoute(
       "ApiControllerOne", // Name of folder
       "ApiControllerOne/{controller}/{action}/{id}",
        new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
        new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
    );
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top