将url视为c#对象,这样我就可以拆分params

时间:2012-07-05 21:09:18

标签: c# http

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

网址格式为

E.G。

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);

第二,第二个?是否有效?此数据来自第三方应用。当然这可以通过Regex实现,但我不想使用它,因为我团队中的大多数人都不知道正则表达式。

2 个答案:

答案 0 :(得分:4)

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

查询将位于Query属性中,您可以使用SchemeAbsolutePath和编码的Query轻松重建网址。

答案 1 :(得分: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]))));