我们最近已从Sitecore 8.0升级到Sitecore 9.0.2。升级后,我们面临Api路由的问题。
我们有多站点环境,并且我们已经在解决方案/站点之一中定义了“自定义路由”配置。而且我们对所有其他站点使用相同的路由。升级后,其中一个站点api调用不会进行。调试时,我们发现MVC路由不是在进行,而是在进行Sitecore路由。
当我们深入研究问题时,我们找到了(希望如此)采用Sitecore路由而不是MVC路由的原因。原因是该站点中的通配符项目。
这里很少有信息可以解释。
路由配置:
private void Configure(HttpConfiguration configuration)
{
var routes = configuration.Routes;
RouteTable.Routes.MapRoute(
"LeadForm",
"api/sm/leadforms/{action}",
new
{
controller = "LeadForm"
});
}
Sitecore内容树
站点配置
<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<!-- Site Definition -->
<sites>
<site patch:before="*" name="microsites" linkProvider="provider-sm-microsite" mvcArea="SMMicrosites" hostName="MySite"
targetHostName="MySite" dictionaryDomain="MicrositesTranslations" virtualFolder="/"
physicalFolder="/" rootPath="/sitecore/content/PSM" startItem="/Microsites" language="en" database="web"
domain="MyDomain" disableClientData="false" templateDir="{B378395B-EF06-45F1-9C00-ffffffff}"/>
</sites>
</sitecore>
</configuration>
已通过javascript调用的API端点:
http://MySite/api/sm/leadforms/validate
由于通配符匹配任何字符串,因此在这种情况下,它与api / sm匹配,因此采用Sitecore路由。
如果上述情况属实,如何解决呢?
注意:这在Sitecore 8实例中是绝对可以的,在Sitecore 9实例中,其他站点也可以使用相同的api并获得响应。
您的及时回答将不胜感激。
谢谢!
更新1: 通过将以下设置更改为“禁用”(默认为DeepScan),api开始命中,但是页面破裂,因为页面上未加载少量图像。这是不可接受的。
<setting name="ItemResolving.FindBestMatch" value="Disabled" />
有线索吗?