ASP.NET MVCの代替コントローラーフォルダーの場所を設定します
-
09-10-2019 - |
質問
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
);