【问题标题】:Web Api Route Config ASP-NET MVCWeb Api 路由配置 ASP-NET MVC
【发布时间】:2017-03-01 16:14:19
【问题描述】:

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

问题是:我们如何设置/定义路线?通常类似于以下代码(在 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}",

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

【问题讨论】:

  • routeTemplate: "API_Services/api/{controller}/{id}"
  • @viveknuna,正如我在评论中所说,不起作用
  • 对不起,我误会了。
  • 所以你有一个类似于.\API_Services\Controllers\_*_Controller.cs 的文件夹结构或计划做类似的事情..正确吗?
  • 我们能看到控制器代码吗..?至少方法定义和属性

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我们的结构是这样的:

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

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

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

    (这显然有效,但明天我可以测试然后我提供反馈。无论如何感谢其他解决方案。谢谢!)

    【讨论】:

    • 你真的不需要指定控制器的路径,只需要路由;)
    【解决方案3】:

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

    它的工作方式意味着无论你将它移动到哪个项目文件夹中,如果它被命名为 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”。

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      相关资源
      最近更新 更多