WebAPI 2中的HttpRouteUrl和属性路由

时间:2014-03-14 05:31:15

标签: c# asp.net-mvc asp.net-web-api html-helper asp.net-web-api-routing

我有以下控制器,允许我使用以/api/v1/report/123.csv结尾的URL通过CSV下载文件:

[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?

1 个答案:

答案 0 :(得分:7)

尝试以下方法:

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

OR

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