4

我有以下的控制器,讓我使用在/api/v1/report/123.csv結尾的URL通過CSV下載文件:HttpRouteUrl和的WebAPI屬性路由2

[RoutePrefix("api/v{version:int?}/report")] 
public class ReportController : ApiController 
{ 
    // ... 
    [Route("{id}.{ext}", Name="DownloadCsvReport")] 
    public HttpResponseMessage Get(int id, String ext) 
    { 
     //... 
    } 
} 

是否有任何將構建正確URL的助手?我想在MVC4.5頁面鏈接到該文件,但我似乎並沒有能夠獲得任何分機或版本:

@Url.HttpRouteUrl("DefaultApi", new { controller = "Report", ext="csv", version=1, id = 3, }) 

@Url.RouteUrl(routeName: "DownloadCsvReport", routeValues: new { id=123, version=1, ext = "csv"}) 

@Url.Action("DownloadCsvReport", new { id = 123, ext="csv" }) 

@Url.RouteUrl("DefaultApi", new { httproute = true, controller = "Report", id = 123, Ext="csv", version =1 }) 

我不認爲我在正確的軌道與任何這些... ....他們都沒有替代routeprefix中的版本或ext中的路由屬性,加上各種其他問題。有沒有辦法鏈接到URL而不硬編碼的路徑?

回答

7

嘗試以下操作:

@Url.HttpRouteUrl("DownloadCsvReport", new { ext="csv", version=1, id = 3, }) 

OR

@Url.RouteUrl("DownloadCsvReport", new { httproute = true, id = 123, Ext="csv", version =1 }) 
+0

謝謝!當我從動態對象中省略「控制器」時,這兩項工作都很完美。它看起來像在查詢字符串上附加了一個額外的「controller = Report」。 – mikebridge

+0

這是正確的...我們不需要控制器在這裏,因爲這是屬性路由..我已經更新了我的答案上面...感謝您的發現。 –