Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将url视为c#对象,以便可以拆分参数_C#_Http - Fatal编程技术网

将url视为c#对象,以便可以拆分参数

将url视为c#对象,以便可以拆分参数,c#,http,C#,Http,我想使用控制台应用程序轻松地将URL与其参数分开,以便对参数进行URL编码。有没有一种类型可以让这变得简单?请记住,这是在web服务器之外运行的 URL的格式如下所示 例如 那么我能做什么 string finalUrl = "http://sitename/folder1/someweb.dll?RetriveTestByDateTime?PatientID=" + HttpUtility.UrlEncode(PatientIDValue) + HttpUtility.UrlEncode(pa

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

URL的格式如下所示

例如

那么我能做什么

string finalUrl = "http://sitename/folder1/someweb.dll?RetriveTestByDateTime?PatientID=" + HttpUtility.UrlEncode(PatientIDValue) + HttpUtility.UrlEncode(param2Value);
第二,第二个
有效吗?此数据来自第三方应用程序。当然,这可以通过正则表达式实现,但我不喜欢使用它,因为我的团队中的大多数人都不知道正则表达式。

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

查询将位于
query
属性中,您可以使用
Scheme
AbsolutePath
和编码的
query
将字符串
URL
中的类-pass传递给构造函数,它将解析出不同的部分


查询将位于
查询
属性中,您可以使用
方案
绝对路径
和编码的
查询
,轻松重建URL。首先,您的URL结构不好

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

首先,你的url结构不好

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


您可以编写自己的实用程序。URL上的第二个
将被视为第一个参数名称的一部分。您可以编写自己的实用程序。URL上的第二个
将被视为第一个参数名称的一部分。我认为Uri无法解决OPs问题(或者可能是我误解了他的问题)@SaeedAmiri-我相信这正是OP的要求。你完全误解了这个问题,没有提供任何帮助来解决这个问题-这个答案比我希望的更好。Uri对象自动对URL进行编码!所以我甚至不需要这个工具。非常好@Trikks-看到OP接受了答案,看起来这对他有帮助。请解释我是如何误解这个问题的。我认为Uri无法解决OPs问题(或者可能是我误解了他的问题)。@SaeedAmiri-我相信这正是OP所要求的。你完全误解了这个问题,没有提供任何帮助来解决这个问题-这个答案甚至比我希望的更好。Uri对象自动对URL进行编码!所以我甚至不需要这个工具。非常好@Trikks-看到OP接受了答案,看起来这对他有帮助。请解释我是如何误解这个问题的。URL是从第三方Web服务输入的。更改他们的URL没有多大意义(假设它有效)。我认为Uri类应该自动修复这个问题。URL是从第三方Web服务输入的。更改他们的URL没有多大意义(假设它能工作)。我认为Uri类应该自动修复这个问题。