我们可以使用用于HTML视图的MVC应用程序,该应用程序使用默认文件夹约定,但是我们想使用仅用于返回XML或JSON的Web服务的控制器设置替代“服务”文件夹。

因此,路由“/services/task/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 例如。

如果您看到黄色文件夹名称在root中添加文件夹名称

之后,您必须修改路由。

修改默认路由

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