我的网站主要是一套通过 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 });
现在在剃须刀页面上,我想发出一个指向“友好”架构 URL 的链接~/Schema.xsd
。预料到路由发现的问题,我立即按名称直接点击路由:
@Html.RouteLink("Schema", "XSD");
然而,这只是发出一个相当于~/
.
我尝试了其他一些路由值组合 - 但它似乎是 MVCHtmlHelper
并且UrlHelper
根本不想选择 Web API 路由。
我敢肯定,如果我破解了 Asp.Net MVC 4 的源代码,我会找到原因——但我希望有人已经知道,因为我找不到关于这种交叉链接的另一个 SO,所以我想通了。 d 是 SO 库的一个很好的补充。
我应该将该浏览添加到~/Schema
并~/Schema.xsd
正确显示 API 操作生成的 XML 模式。