![](/img/trans.png)
[英]Html.Routelink, Html.BeginRouteForm, Ajax.RouteLink and Ajax.BeginRouteForm not working
[英]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的HtmlHelper
和UrlHelper
根本不想選擇Web API路由。
我敢肯定,如果我破解了Asp.Net MVC 4的來源我會找到原因 - 但我希望有人已經知道了,因為我找不到另一個關於這種交聯的SO我認為它' d是SO庫的一個很好的補充。
我應該補充說,瀏覽~/Schema
和~/Schema.xsd
會正確顯示API操作生成的XML模式。
更新
Post-RC的一個方法被添加到MVC的UrlHelper
, HttpRouteUrl
,這與我在這個答案中建議完全相同。 這是我在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.