4

나는이 날 /api/v1/report/123.csv로 끝나는 URL을 사용하여 CSV를 통해 파일을 다운로드 할 수 있습니다 다음 컨트롤러 :HttpRouteUrl 및 WebAPI에서 라우팅 속성이

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

이 거기에가 올바른 URL을 구성하는 도우미?

@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 }) 

나는 내가에있어 생각하지 않는다 : 나는 MVC4.5 페이지에서 파일에 링크하기 위해 노력하고있어하지만 난 확장 또는 버전 중 하나를 얻을 수있을 것 같지 않습니다 이 중 어떤 것도 제대로 추적 할 수 없습니다 .... 라우트 속성의 버전이나 경로 속성의 버전을 대체하는 것은 아니며 여러 가지 다른 문제가 있습니다. 경로를 하드 코딩하지 않고 URL에 연결할 수있는 방법이 있습니까?

답변

7

는 다음과 같은 시도 :

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

또는

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

감사합니다! 두 가지 모두 동적 객체에서 "컨트롤러"를 생략 할 때 완벽하게 작동합니다. 그것은 추가 "컨트롤러 = 보고서"를 쿼리 문자열에 추가하는 것 같습니다. – mikebridge

+0

맞습니다 ... 우리는 여기에 컨트롤러가 필요하지 않습니다.이 라우트는 속성 라우팅입니다. 위의 내 대답을 업데이트했습니다 ... 찾아 주셔서 고맙습니다. –