我有以下控制器,允许我使用以/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?
答案 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 })