MVC5 / WEBAPI 2将HomeApiController路由到/ api / home而不是/ homeapi

时间:2017-02-21 09:30:15

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing

我有一个现有的webapi 2应用程序需要基本的前端添加。现有的webapi控制器已在名为xController yController的Controllers目录根目录中创建。

Controllers
-XController.cs
-YController.cs

使用以下路线

 config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}"
            );

这些控制器中的每一个都需要一个附带的MVC控制器。我想要做的是将API控制器重命名为XApiController YApiController并使用路由来确保服务的现有用法完成。然后我可以为前端添加标准的MVC控制器。

Controllers
-XApiController (previously XContoller)
-XController
-YApiController (previously YController)
-YController

2 个答案:

答案 0 :(得分:2)

你能不能只使用RoutePrefix属性来做到这一点?然后你可以随心所欲地调用你的控制器,只需要让属性决定它应该托管在哪里,在控制器级控制你的路由有利有弊,但它似乎是一个常见的用例,所以例如:

[RoutePrefix("api/home")]
public class SomeHomeController: ApiController
{
 // ...
}

答案 1 :(得分:2)

控制器在每个框架中都是独立的类型,每个框架都可以发现它们,无论它们的位置如何(只要它们具有正确的名称)。没有理由搞乱路由以获得您想要的结果。您唯一需要的(假设它是可接受的)是将您的控制器放入不同的命名空间/文件夹,这样您就可以拥有2个具有相同名称的控制器(MVC和Web API)。

ApiControllers
-XController
-YController
Controllers
-XController
-YController

如果你问我,将MVC和API控制器保存在一个单独的位置仍然更好,即使你不能将它们作为单独的应用程序部署。