gpt4 book ai didi

asp.net - Html.RouteLink 到 Web API 路由 - 可能吗?

转载 作者:行者123 更新时间:2023-12-02 10:13:55 25 4
gpt4 key购买 nike

我的网站主要是一套通过 Asp.Net Web API 公开的 Web 服务。还有一些页面,旨在支持 Web 服务(测试等),用 Razor(以及隐式 Asp.Net MVC 4)编写。

对于 Web 服务的 XML 版本,我有一个架构导出操作(使用 XsdDataContractExporter),该操作由我的标准 API 路由选取(尽管请注意 - 我已经翻转了Web API 和页面):

//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 });

现在,在 razor 页面上,我想发出一个指向“友好”架构 URL ~/Schema.xsd 的链接。预见到路线发现的问题,我立即直接按名称点击路线:

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

然而,这只会发出一个相当于 ~/ 的链接。

我尝试了一些其他路由值组合 - 但看起来 MVC 的 HtmlHelperUrlHelper 根本不想选取 Web API 路由。

我确信,如果我破解了 Asp.Net MVC 4 的源代码,我会找到原因 - 但我希望有人已经知道,并且由于我找不到关于此类交叉链接的另一个 SO,我我认为这将是对 SO 库的一个很好的补充。

我应该补充一点,浏览 ~/Schema~/Schema.xsd 可以正确显示 API 操作生成的 XML 架构。

最佳答案

更新

Post-RC 方法被添加到 MVC 的 UrlHelperHttpRouteUrl 中,该方法与我在本答案中建议的操作完全相同。 This is my discussion thread over on 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";

对代码的进一步分析表明,它期望该路由值是一个 bool 值。

显然,这是可以转化为扩展方法的东西 - 也许是 Html.HttpRouteLink (和 Html.HttpActionLink) - 在 UrlHelper< 上有额外的扩展 用于隐藏路由数据值的魔术字符串。

关于asp.net - Html.RouteLink 到 Web API 路由 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com