2017-05-09 50 views
1

我有一個需要檢查URL是否有效的C#(.Net Core 1.1)應用程序。我使用了Uri.IsWellFormedUriString(),它工作得很好,但對下面這個返回false的問題有疑問。在我看來,該網址是完全有效的?Uri.IsWellFormedUriString()對於正確的URL返回false

Uri.IsWellFormedUriString("http://www.test.com/search/Le+Venezuela+b%C3%A9n%C3%A9ficie+d%27importantes+ressources+naturelles+%3A+p%C3%A9trole%2C+gaz%2C+mines", UriKind.Absolute) 

我用同樣的網址與PHP函數低於該說的網址格式正確:

function filter_var($url, FILTER_VALIDATE_URL) 

這裏我錯過什麼?

回答

2

可能問題在於url被轉義了。試試這個使用UnscapeDataString

string urlencoded= "http://www.test.com/search/Le+Venezuela+b%C3%A9n%C3%A9ficie+d%27importantes+ressources+naturelles+%3A+p%C3%A9trole%2C+gaz%2C+mines"; 
var isWellFormed=Uri.IsWellFormedUriString(
         Uri.UnescapeDataString(urlencoded), 
         UriKind.Absolute); 

編輯

當你使用的是.NET的核心,也許你會需要使用System.Net.WebUtility.UrlDecode

1

的問題是%2C,這是不必要的逃脫;使它成爲逗號,並且它報告爲真。

+1

雖然這不是全部內容:''http://www.test.com/x%2C'''報告'true'。 ''「http://x.com/%C3%A9x%2C」'壞了,但刪除'%C3','%A9','x'或'%2C'就可以了。我很困惑。 –

+0

你是對的,@JonSkeet也是。所以也許不是一個壞主意,在檢查網址是否正常形成之前先檢查網址 – Pikoh

+0

@JonSkeet對第二個例子進行隱藏處理並再次轉義給出'http:// x.com /%C3%A9x,',所以我認爲是什麼被認爲是一個正確逃脫uri – Pikoh

相關問題