我正在研究通用的网上商店,并且遇到了奇怪的问题。实际上,我要求网页上列出的所有产品都有正确的URL。大多数情况下,这些产品都是相对的。
我正在使用新的Uri方法来创建完整的产品网址。
new Uri (base, href)
//this actually decide to add "/" before product href
href = x.ProductHref.IsUrlAbsolute() ? x.ProductHref : ((x.ProductHref.StartsWith("/") || (x.ProductHref.StartsWith("."))) ? x.ProductHref : "/" + x.ProductHref)
结果失败:如何纠正此
Base URL: "www.bebitalia.it/Products/ProductList_it.html#filter&.CHAISE_LONGUE"
Product href: Product-landscape-chaise_longue_118_it.html
Result : http://www.bebitalia.it/Product-landscape-chaise_longue_118_it.html ==> Status Wrong
Expected: http://www.bebitalia.it/Products/Product-landscape-chaise_longue_118_it.html
我试图纠正它,但它对其他人不起作用:)。想让它变得通用。请建议任何解决方案,AM我正确的方向或更好的方法是必需的。
答案 0 :(得分:1)
我解决了它。现在它是通用的,适用于所有场景。
PageURL是基本网址
href =(x.ProductHref.IsUrlAbsolute()||(!x.ProductHref.Contains(“/”)&&!PageUrl.AbsoluteUri.EndsWith(“/”)) ? x.ProductHref :( (x.ProductHref.StartsWith(“/”)||(x.ProductHref.StartsWith(“。”))) ? x.ProductHref:“/”+ x.ProductHref))
Url = new Uri(PageUrl,href)
我提取了一个规则=>如果基本网址不以“/”结尾且productURL(相对)也不包含“/”而基数是绝对的,则永远不要将“/”添加到亲属。
我不知道浏览器如何自动解决此类情况。 它必须自动解决 在创建新的uri(base,relative)时。
答案 1 :(得分:0)
以/
开头的任何链接都被视为位于域的根目录中。首先,为了清晰起见,我将重新格式化您的代码:
href = x.ProductHref.IsUrlAbsolute()
? x.ProductHref
: (x.ProductHref.StartsWith("/") || (x.ProductHref.StartsWith("."))
? x.ProductHref
: "/" + x.ProductHref;
将其简化为评估方式:
href = false
? // Nothing
: (false || false)
? // Nothing
: "/" + "Product-landscape-chaise_longue_118_it.html";
这会生成网址/Product-landscape-chaise_longue_118_it.html
,该网址以/
开头,因此位于您网域的根目录中。
如何修复此问题完全取决于您未提供的其他代码,因此我无法提供任何建议。
答案 2 :(得分:0)
您应该知道在新的Uri()之后是否更改href
,它不会更改结果,但我认为这是在您调用构造函数之前。
什么是基地? www.bebitalia.it/Products/ProductList_it.html#filter&.CHAISE_LONGUE
不是有效的Uri
,而Uri
没有带2个字符串参数的构造函数。
如果href是绝对的,构造函数new Uri(Uri,String)
将自动处理它,并放置/
。它还会在TLD之后切断基础Uri的所有内容(可能这就是您的代码中发生的情况)。
HERE您可以看到它是如何工作的(这是MSDN示例)