Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
C# 如何将带有查询字符串的URL作为查询字符串发送_C#_Url_Query String - Fatal编程技术网

C# 如何将带有查询字符串的URL作为查询字符串发送

C# 如何将带有查询字符串的URL作为查询字符串发送,c#,url,query-string,C#,Url,Query String,我正在从一页重定向到另一页,从第二页重定向到第三页。我有第一页的信息,第二页没有用到,但必须转移到第三页。是否可以将第三个页面的URL及其查询字符串作为查询字符串发送到第二个页面。下面是一个例子: Response.Redirect("MyURL1?redi=MyURL2?name=me&ID=123"); 我的问题是,作为查询字符串发送的URL有两个查询字符串变量,那么系统如何知道&后面的是第二个URL的第二个变量,而不是第一个URL的第二个变量?谢谢。您的查询字符串应如下所示: M

我正在从一页重定向到另一页,从第二页重定向到第三页。我有第一页的信息,第二页没有用到,但必须转移到第三页。是否可以将第三个页面的URL及其查询字符串作为查询字符串发送到第二个页面。下面是一个例子:

Response.Redirect("MyURL1?redi=MyURL2?name=me&ID=123");

我的问题是,作为查询字符串发送的URL有两个查询字符串变量,那么系统如何知道&后面的是第二个URL的第二个变量,而不是第一个URL的第二个变量?谢谢。

您的查询字符串应如下所示:

MyURL1?redi=MyURL2&name=me&ID=123
检查:


你应该有一个?符号和所有参数都与&。如果参数值包含特殊字符,则仅使用它们。

必须对作为重定向url中的参数传递的url进行编码。像这样:

MyURL = "MyURL1?redi=" + Server.UrlEncode("MyURL2?name=me&ID=123");
这将创建一个不带双“?”和“&”字符的正确url:

MyURL1?redi=MyURL2%3fname%3dme%26ID%3d123
见MSDN:


若要从此编码的url提取重定向url,必须使用
HttpServerUtility.UrlDecode
将其再次转换为正确的url。

我发现在发送之前在Base64中对查询字符串参数进行编码很有帮助。在某些情况下,当您需要发送各种特殊字符时,这会有所帮助。它不适用于良好的调试字符串,但它将保护您发送的任何内容不与任何其他参数混合


请记住,解析查询字符串的另一方还需要解析Base64以访问原始输入。

您考虑过使用会话变量吗?对于MyURL1,这看起来像三个查询字符串。我希望名称和ID是MyURL2的查询字符串。然后在重定向之前访问当前的查询字符串,并将参数传递给下一个查询字符串(您感兴趣的查询字符串)。@DovMiller我只是说查询字符串应该是什么样子。这取决于您如何获得要传递到下一个地址的查询字符串-它只是一个字符串-因此您可以使用子字符串等,或者只是从查询字符串字典访问参数值。也许,我不完全理解您想要实现的目标。URL解码/编码没有很好的定义。每个操作系统/浏览器/服务器都有自己的独特之处。该实现在.Netv1.1和.Netv2.0之间进行了更改,因此我建议遵循@JulioHM的建议,并对需要在查询参数中的URL使用base64。您提到的
HttpServerUtility.UrlDecode
可以通过
HttpContext.Current.Server.UrlDecode
或webforms中的
Server.UrlDecode
访问。您还可以使用static
HttpUtility.UrlDecode
。正如建议的那样,在C#-,和中使用base64。还需要在JavaScript中使用它,并且
using System.IO;
using System.Net;

static void sendParam()
{

    // Initialise new WebClient object to send request
    var client = new WebClient();

    // Add the QueryString parameters as Name Value Collections
    // that need to go with the HTTP request, the data being sent
    client.QueryString.Add("id", "1");
    client.QueryString.Add("author", "Amin Malakoti Khah");
    client.QueryString.Add("tag", "Programming");

    // Prepare the URL to send the request to
    string url = "http://026sms.ir/getparam.aspx";

    // Send the request and read the response
    var stream = client.OpenRead(url);
    var reader = new StreamReader(stream);
    var response = reader.ReadToEnd().Trim();

    // Clean up the stream and HTTP connection
    stream.Close();
    reader.Close();
}