2013-06-05 61 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