Est-il possible de passer des paramètres avec une requête HTTP
get? Si oui, comment devrais-je alors le faire? J'ai trouvé un HTTP
post requst ( link ). Dans cet exemple, la chaîne postData
est envoyée à un serveur Web. Je voudrais faire la même chose en utilisant get à la place. Google a trouvé cet exemple sur HTTP
get here . Cependant, aucun paramètre n'est envoyé au serveur Web.
Dans une demande GET, vous transmettez des paramètres dans la chaîne de requête.
string url = "http://somesite.com?var=12345";
Ma manière préférée est la suivante. Il gère l'échappement et l'analyse pour vous.
WebClient webClient = new WebClient();
webClient.QueryString.Add("param1", "value1");
webClient.QueryString.Add("param2", "value2");
string result = webClient.DownloadString("http://theurl.com");
La première WebClient
est plus facile à utiliser; Les arguments GET sont spécifiés dans la chaîne de requête - la seule astuce consiste à ne pas oublier d'échapper aux valeurs:
string address = string.Format(
"http://foobar/somepage?arg1={0}&arg2={1}",
Uri.EscapeDataString("escape me"),
Uri.EscapeDataString("& me !!"));
string text;
using (WebClient client = new WebClient())
{
text = client.DownloadString(address);
}
L'objet WebRequest semble être trop de travail pour moi. Je préfère utiliser le contrôle WebClient.
Pour utiliser cette fonction, il vous suffit de créer deux NameValueCollections contenant vos paramètres et vos en-têtes.
Considérons la fonction suivante:
private static string DoGET(string URL,NameValueCollection QueryStringParameters = null, NameValueCollection RequestHeaders = null)
{
string ResponseText = null;
using (WebClient client = new WebClient())
{
try
{
if (RequestHeaders != null)
{
if (RequestHeaders.Count > 0)
{
foreach (string header in RequestHeaders.AllKeys)
client.Headers.Add(header, RequestHeaders[header]);
}
}
if (QueryStringParameters != null)
{
if (QueryStringParameters.Count > 0)
{
foreach (string parm in QueryStringParameters.AllKeys)
client.QueryString.Add(parm, QueryStringParameters[parm]);
}
}
byte[] ResponseBytes = client.DownloadData(URL);
ResponseText = Encoding.UTF8.GetString(ResponseBytes);
}
catch (WebException exception)
{
if (exception.Response != null)
{
var responseStream = exception.Response.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
Response.Write(reader.ReadToEnd());
}
}
}
}
}
return ResponseText;
}
Ajoutez vos paramètres de chaîne de requête (si nécessaire) en tant que NameValueCollection.
NameValueCollection QueryStringParameters = new NameValueCollection();
QueryStringParameters.Add("id", "123");
QueryStringParameters.Add("category", "A");
Ajoutez vos en-têtes http (si nécessaire) en tant que NameValueCollection.
NameValueCollection RequestHttpHeaders = new NameValueCollection();
RequestHttpHeaders.Add("Authorization", "Basic bGF3c2912XBANzg5ITppc2ltCzEF");
Vous pouvez également transmettre une valeur directement via une URL.
Si vous voulez appeler une méthode public static void calling(string name){....}
alors vous devriez appeler usingHttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya);
webrequest.Method = "GET";
webrequest.ContentType = "application/text";
Assurez-vous simplement que vous utilisez ?Object = value
dans l'URL