问题 在控制器文件夹中添加子文件夹 - .net webapi


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

我在考虑像Controller / Customer这样的东西,包括Customer模块的控制器。


8578
2017-12-04 08:53


起源

我想要的是在URL中具有子文件夹名称。即:lolcalhost / weApp / {foldername} / {controller} - mangun


答案:


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


5
2017-12-17 16:29





我用区域来解决这个问题。如此处所述 http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/


2
2018-02-22 11:40





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

  1. 你的新溃败应该在默认溃败之前
  2. 您无法为默认命名空间添加命名空间

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

2
2018-02-02 06:07





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

位于 /Controllers/Authentication 夹

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

1
2018-04-20 23:26



我认为在你的例子里,它应该是 [RoutePrefix("api/login")] 并不是 [Route(...)]。该 [Route(...)] 属性将进入内部的个别动作 LoginController 类。 - Jiveman