【问题标题】:Adding sub folders in the controller folder - .net webapi在控制器文件夹中添加子文件夹 - .net webapi
【发布时间】:2018-07-20 17:02:05
【问题描述】:

有没有办法在Webapi项目的Controller文件夹中添加子文件夹?

我正在考虑诸如 Controller/Customer 之类的东西,其中包括 Customer 模块的控制器。

【问题讨论】:

  • 我想要的是在 URL 中包含子文件夹名称。即:lolcalhost/weApp/{foldername}/{controller}

标签: .net asp.net-web-api


【解决方案1】:

控制器不能以这种方式工作。在 Asp.NET 中,您的文件夹结构就是您的网站结构。在 WEB API 中,控制器的查找独立于结构。事实上,您可以将它们放在不同的程序集中,框架仍然可以找到它们。路由不会按您期望的方式工作。 您可以添加一条您拥有“文件夹名称”的路线,就像您说的,localhost/WebApp/{foldername}/{controller}。只有 {foldername} 可以是普通的静态文件夹名称 (localhost/WebApp/foldername/{controller})。所以客户端将不得不在其中调用带有“文件夹名”的 url,但代码的位置并不重要,因为 MVC 框架不会区分控制器下的文件夹树。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我自己解决这个问题的方法是添加另一个 Maproute 并在控制器之前添加命名空间。请注意两点:

      1. 您的新路线应该在默认路线之前
      2. 您不能为默认的命名空间添加命名空间

            routes.MapRoute(
               name: "Secretariat",
               url: "{namespace}/{controller}/{action}/{id}",
               defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
           );
        

      【讨论】:

        【解决方案4】:

        这里的答案是错误的。你可以很容易地做到这一点。你只需要在你的控制器类上指定路由:

        位于/Controllers/Authentication 文件夹中

        //An example of you specifying a diff. route than the folder path
        [Route("api/login")]
        public class LoginController {...}
        

        【讨论】:

        • 我认为在您的示例中,应该是 [RoutePrefix("api/login")] 而不是 [Route(...)][Route(...)] 属性将用于 LoginController 类中的各个操作。
        猜你喜欢
        • 2015-09-14
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多