簡體   English   中英

Html.RouteLink到Web API路由 - 可能嗎?

[英]Html.RouteLink to a Web API Route - possible?

我的網站主要是通過Asp.Net Web API公開的一套Web服務。 還有一些頁面,旨在支持使用Razor(以及隱式的Asp.Net MVC 4)編寫的Web服務(測試等)。

對於webservices的XML版本,我有一個模式導出操作(使用XsdDataContractExporter ),這是我的標准API路由選擇的(盡管注意 - 我已經XsdDataContractExporter了Web API和Pages的優先級):

//page routes
routes.MapRoute(
    "Default", // Route name
    "pages/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", 
          action = "Index", 
          id = UrlParameter.Optional 
        } // Parameter defaults
);

//an additional route for my Schema controller action
routes.MapHttpRoute("XSD", "schema.xsd",
    new { controller = "schema" });

//API Catch-all Route
routes.MapHttpRoute("APIMain", "{controller}/{id}",
    new { id = RouteParameter.Optional });

現在在剃刀頁面上,我想發出一個指向“友好”架構URL ~/Schema.xsd 預測路線發現的問題我立即直接按名稱命中路線:

@Html.RouteLink("Schema", "XSD");

但是這只會發出相當於~/的鏈接。

我嘗試了其他一些路由值組合 - 但看起來MVC的HtmlHelperUrlHelper根本不想選擇Web API路由。

我敢肯定,如果我破解了Asp.Net MVC 4的來源我會找到原因 - 但我希望有人已經知道了,因為我找不到另一個關於這種交聯的SO我認為它' d是SO庫的一個很好的補充。

我應該補充說,瀏覽~/Schema~/Schema.xsd會正確顯示API操作生成的XML模式。

更新

Post-RC的一個方法被添加到MVC的UrlHelperHttpRouteUrl ,這與我在這個答案中建議完全相同。 這是我在CodePlex上的討論主題 ,我被告知了這一點。 因此,您無需使用此處提到的魔術字符串來生成Web API路由的鏈接。

原始答案

我設法讓它工作 - 雖然它可能不是MVC 4時RTMd(免責聲明免責聲明!)

我更改了我的Html.RouteLink調用,如下所示:

@Html.RouteLink("XML request schema", "XSD", new { httproute = true })

我原本打算不打算立即回答我自己的問題 - 但做了一些研究后我找到了答案。

首先,我驗證了HtmlHelper的路由集合與RouteTable.Routes集合相同(即包含所有路由)。

在調用鏈之后,我記得曾經從CodePlex搜索當前的Web API和頁面MVC 4源代碼, HttpRoute (在System.Web.Http.Routing )需要添加“隱藏”路由值,否則他們會永遠不會匹配。 這是HttpRoute類第21-25行的源代碼(截至2012年6月8日來源正確):

/// <summary>
/// Key used to signify that a route URL generation request should include HTTP routes (e.g. Web API).
/// If this key is not specified then no HTTP routes will match.
/// </summary>
internal const string HttpRouteKey = "httproute";

對代碼的進一步分析表明,它希望這個路由值是一個布爾值。

顯然,這可以轉化為擴展方法 - 也許是Html.HttpRouteLink (和Html.HttpActionLink ) - 在UrlHelper上有額外的擴展,用於隱藏路由數據值的魔術字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM