升级到 11 后 Kentico 和通配符 URL 出现问题
Problems with Kentico and Wildcard URLs after upgrade to 11
前言:
这个问题对于 Stack Overflow 来说可能太具体了。
我还在 Kentico 论坛上 post 编辑了它:https://devnet.kentico.com/questions/problems-with-kentico-and-wildcard-urls-after-upgrade-to-11
剧情简介:
升级到 Kentico 11 后,我的通配符设置似乎不再正常工作。经过大量挖掘和研究,我认为问题出在 Kentico 用于将通配符值映射到 URL 参数的机制中的某个地方......但我不知道如何研究该过程以尝试和找出问题所在 and/or 如何解决。
详情:
我的页面设置了以下“标准 URL 或通配符”值集:
/Invest/Communities/{ProvinceName}/{EconomicRegionName}/{RegionalDistrictName}/{CommunityName}
此页面还有一个别名 /Invest/Communities/Province
,但我不确定它是否对我有用。
页面本身包含一个自定义控件,其用户控件虚拟路径为 ~/<project>/WebControls/Communities/Community.ascx
升级之前,这个 URL: /Invest/communities/myProvince/myEconomic/myRegional/myCommunity/
工作正常 - 如果我在 Community.ascx.cs
Page_Load {}
方法的开头设置断点,断点将被击中,我可以从查询字符串中提取这四个值(通过例如 HttpContext.Current.Request["ProvinceName"]
)。
升级后,同样的 URL 没有命中断点,而是指示我出现 404 错误。但是,如果我手动将 URL 重写为 /invest/communities/profile/?ProvinceName=myProvince&EconomicRegionName=myEconomic&RegionalDistrictName=myRegional&CommunityName=myCommunity
,该页面将按预期工作。断点命中,可以从 Request
对象中提取值。
似乎价值映射的任何机制都出了问题……但由于这是 Kentico 内置的东西,我不清楚如何更深入地研究它,看看它在哪里失败了。
我尝试过的其他事情:
- 重新签署所有宏。这解决了我在升级后遇到的另一个问题,但没有帮助解决这个问题。
- 在“页面”> URL 选项卡上:从
Standard URL or wildcard
更改为 Route
在某处的论坛 post 中找到此建议;这样做使得我可以再次正确地命中控件中的断点,但是 Request
对象中的 none 通配符值不再可用。不好。
- 'Saving' 在页面选项卡、URLs 选项卡和其他地方,以防万一有什么东西损坏了,重新保存会以某种方式重置。完全在黑暗中拍摄,但在极少数情况下,这在以前是有效的。这里没有帮助。
我能够重现这个,似乎找到了解决方法。
如果我在页面的 URL 路径中使用您的通配符路径,我会得到您的错误。
但是,如果我使用通配符路径作为页面别名,我可以获得所有通配符参数。
https://www.screencast.com/t/jj2DesUrsGLR
最好,
马特
原来这其实是Kentico 11.0.0的一个bug。
我最终联系了 Kentico 支持,他们对其进行了修复。
该错误已由 Kentico 11.0.7 修补程序解决。
前言:
这个问题对于 Stack Overflow 来说可能太具体了。 我还在 Kentico 论坛上 post 编辑了它:https://devnet.kentico.com/questions/problems-with-kentico-and-wildcard-urls-after-upgrade-to-11
剧情简介:
升级到 Kentico 11 后,我的通配符设置似乎不再正常工作。经过大量挖掘和研究,我认为问题出在 Kentico 用于将通配符值映射到 URL 参数的机制中的某个地方......但我不知道如何研究该过程以尝试和找出问题所在 and/or 如何解决。
详情:
我的页面设置了以下“标准 URL 或通配符”值集:
/Invest/Communities/{ProvinceName}/{EconomicRegionName}/{RegionalDistrictName}/{CommunityName}
此页面还有一个别名 /Invest/Communities/Province
,但我不确定它是否对我有用。
页面本身包含一个自定义控件,其用户控件虚拟路径为 ~/<project>/WebControls/Communities/Community.ascx
升级之前,这个 URL: /Invest/communities/myProvince/myEconomic/myRegional/myCommunity/
工作正常 - 如果我在 Community.ascx.cs
Page_Load {}
方法的开头设置断点,断点将被击中,我可以从查询字符串中提取这四个值(通过例如 HttpContext.Current.Request["ProvinceName"]
)。
升级后,同样的 URL 没有命中断点,而是指示我出现 404 错误。但是,如果我手动将 URL 重写为 /invest/communities/profile/?ProvinceName=myProvince&EconomicRegionName=myEconomic&RegionalDistrictName=myRegional&CommunityName=myCommunity
,该页面将按预期工作。断点命中,可以从 Request
对象中提取值。
似乎价值映射的任何机制都出了问题……但由于这是 Kentico 内置的东西,我不清楚如何更深入地研究它,看看它在哪里失败了。
我尝试过的其他事情:
- 重新签署所有宏。这解决了我在升级后遇到的另一个问题,但没有帮助解决这个问题。
- 在“页面”> URL 选项卡上:从
Standard URL or wildcard
更改为Route
在某处的论坛 post 中找到此建议;这样做使得我可以再次正确地命中控件中的断点,但是Request
对象中的 none 通配符值不再可用。不好。 - 'Saving' 在页面选项卡、URLs 选项卡和其他地方,以防万一有什么东西损坏了,重新保存会以某种方式重置。完全在黑暗中拍摄,但在极少数情况下,这在以前是有效的。这里没有帮助。
我能够重现这个,似乎找到了解决方法。
如果我在页面的 URL 路径中使用您的通配符路径,我会得到您的错误。 但是,如果我使用通配符路径作为页面别名,我可以获得所有通配符参数。 https://www.screencast.com/t/jj2DesUrsGLR
最好, 马特
原来这其实是Kentico 11.0.0的一个bug。 我最终联系了 Kentico 支持,他们对其进行了修复。
该错误已由 Kentico 11.0.7 修补程序解决。