0

我想使用控制台应用程序轻松地将 URL 与其参数分开,以便对参数进行 URL 编码。有没有一种类型可以让这变得简单?请记住,这是在 Web 服务器之外运行的。

URL 的格式为

例如

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime?PatientID=1234&param2=blah blah blah";

那么我可以做

string finalUrl = "http://sitename/folder1/someweb.dll?RetriveTestByDateTime?PatientID=" + HttpUtility.UrlEncode(PatientIDValue) + HttpUtility.UrlEncode(param2Value);

第二,第二个?有效吗?此数据来自第 3 方应用程序。当然,这可以通过 Regex 来完成,但我不喜欢使用它,因为我团队中的大多数人都不知道正则表达式。

4

2 回答 2

4

使用Uri类 - 将字符串传递url给构造函数,它将解析出不同的部分。

查询将在属性中,您可以使用和编码Query的 轻松重建 URL 。SchemeAbsolutePathQuery

于 2012-07-05T21:15:53.147 回答
0

首先你的网址结构不好

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime?PatientID=1234&param2=blah blah blah";

应该

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime&PatientID=1234&param2=blah blah blah";

一个可能的解决方案,我现在不在开发环境中,所以这是从头开始的。可能需要对代码进行一些更改。

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime&PatientID=1234&param2=blah blah blah";
var uri = new Uri(url);
var queryString = uri.Query;
NameValueCollection query = HttpUtility.ParseQueryString(queryString)
query["PatientID"] = string.Concat(HttpUtility.UrlEncode(PatientIDValue), HttpUtility.UrlEncode(param2Value));

// Rebuild the querystring
queryString = "?" + 
                 string.Join("&", 
                              Array.ConvertAll(query.AllKeys, 
                                                key => string.Format("{0}={1}", 
                                                HttpUtility.UrlEncode(key), 
                                                HttpUtility.UrlEncode(query[key]))));
于 2012-07-05T21:26:49.890 回答