不正确的新Uri(基数,相对)

时间:2013-06-14 14:25:15

标签: c# uri

我正在研究通用的网上商店,并且遇到了奇怪的问题。实际上,我要求网页上列出的所有产品都有正确的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我正确的方向或更好的方法是必需的。

3 个答案:

答案 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示例)