【问题标题】:HttpRouteUrl and Attribute Routing in WebAPI 2Web API 2 中的 HttpRouter 和属性路由
【发布时间】:2014-04-19 06:23:43
【问题描述】:

我有以下控制器,它允许我使用以 /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 中的版本或 route 属性中的 ext,以及各种其他问题。有什么方法可以链接到 URL 而无需硬编码路径?

【问题讨论】:

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


    【解决方案1】:

    尝试以下方法:

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

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

    【讨论】:

    • 谢谢!当我从动态对象中省略“控制器”时,这两个都可以完美地工作。看起来这在查询字符串上附加了一个额外的“controller=Report”。
    • 没错...我们在这里不需要控制器,因为这是属性路由..我已经更新了我上面的答案...感谢您发现...
    猜你喜欢
    • 2017-03-24
    • 2015-07-19
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2013-07-10
    相关资源
    最近更新 更多