2013-06-05 52 views
4

我有一个get方法的WebAPI控制器如下:动态路由使用Web API

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 

谢谢!

回答

13

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

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

此路线应该在默认值之前添加。

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

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

不要忘记,如果你使用MyController,然后路由段只是“我”

+1

辉煌!像冠军一样工作! –

0

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

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

+0

您的链接是死。 – MetaFight