4

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

public class MyController : ApiController
{
      public ActionResult Get(string id) 
      {
         //do some stuff
      }
}

挑战在于我正在尝试使用 Web API 实现 WebDAV。这意味着当用户向下浏览文件夹结构时,URL 将更改为:

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

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

ParentFolder1/ChildFolder1/item1.txt

谢谢!

4

2 回答 2

13

“动态”路线不是问题。只需使用通配符:

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

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

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

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />

不要忘记,如果您使用MyController,那么路线段只是“我的”

于 2013-06-05T21:39:41.110 回答
0

使用 NuGet 包“AttributeRouting Web API”。您可以为每个操作指定特定路由,包括动态参数。

我只是在处理这个问题,所以请尝试一下,如果您需要更多帮助,请回来。

于 2013-06-05T20:44:15.910 回答