使用Web API进行动态路由

Bla*_*ell 4 asp.net c#-4.0 asp.net-web-api

我有一个带有Get方法的WebAPI控制器,如下所示:

public class MyController : ApiController
{
      public ActionResult Get(string id) 
      {
         //do some stuff
      }
}
Run Code Online (Sandbox Code Playgroud)

我们面临的挑战是尝试使用Web API实现WebDAV.这意味着当用户浏览文件夹结构时,URL将更改为:

/api/MyController/ParentFolder1/ChildFolder1/item1.txt

有没有办法将该操作路由到MyController.Get并提取出路径,以便我得到:

ParentFolder1/ChildFolder1/item1.txt
Run Code Online (Sandbox Code Playgroud)

谢谢!

Nen*_*nad 13

"动态"路线不是问题.只需使用通配符:

config.Routes.MapHttpRoute(
    name: "NavApi",
    routeTemplate: "api/my/{*id}",
    defaults: new { controller = "my" }
);
Run Code Online (Sandbox Code Playgroud)

应在默认路由之前添加此路由.

问题是您希望以文件扩展名结束URL.它将被解释为对.txt文件的静态请求.在IIS7 +中,您可以通过在web.config中添加行来解决此问题:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)

不要忘记,如果你使用MyController,那么路段只是"我的"