Web Api路由配置ASP-NET MVC

时间:2016-10-19 20:48:31

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

我们正在开发一个ASP.NET MVC应用程序,我们决定将一个名为 API_Services 的文件夹中的API服务/控制器分开,而不是直接将它们放在控制器中。

问题是:我们如何为此设置/定义路线?简单地类似于以下代码(在App_Start文件夹和WebApiConfig.cs文件中):

routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }

我们尝试将routeTemplate设置为:

routeTemplate: "API_Services/api/{controller}/{id}",

或者这个:

routeTemplate: "api/API_Services/{controller}/{id}",

不起作用......有人可以帮助我们吗?谢谢!

3 个答案:

答案 0 :(得分:1)

如果我理解正确的问题: 如果你使用一些web api控制器,我建议阅读“ASP.NET Web API 2:从开始到完成第二版构建REST服务由Jamie Kurtz,Brian Wortman”一书。有关于api版本的章节,作者描述了通过文件夹(V1文件夹,V2等)的路由。 您也可以只使用"inline-attribute" routing。 您可以阅读Areas(或者只是尝试将一些“命名空间”放入路由设置or play with it)。我希望它有所帮助,对不起我的英语。

答案 1 :(得分:0)

我们是这样的结构:

Controllers (Folder)
    A_Controller
    B_Controller
API (Folder)
    A_Controller
    B_Controller

经过大量的谷歌搜索后,我发现了这个:

Controllers (Folder)    
    A_Controller
    B_Controller
    API (Folder)
        A_Controller
        B_Controller

(显然有效,但明天我去测试然后我会给予反馈。无论如何,谢谢其他解决方案。谢谢!)

答案 2 :(得分:0)

您正在谈论的更改是您的文件夹,而不是约定将忽略的路由。

它的工作方式意味着你移动它的任何项目文件夹,如果它被命名为XXXController,它将被发现没有路由更改。以下是:

routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }

http://yoursite.com/api/XXXController即使在另一个文件夹中也会找到你的控制器:

如果您想要更多控制权,可以使用默认设置,但我不认为这是您要求的。例如:

routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/API_services/{id}",
defaults: new { controller="mycontroller" id = RouteParameter.Optional }

因此,每当人们访问http://yoursite.com/api/API_services时,使用的控制器将是" mycontroller"。