Ist es möglich, Parameter mit einer HTTP
-Get-Anforderung zu übergeben? Wenn ja, wie soll ich es dann machen? Ich habe eine HTTP
post requst ( link ) gefunden. In diesem Beispiel wird die Zeichenfolge postData
an einen Webserver gesendet. Ich möchte dasselbe mit get machen. Google hat dieses Beispiel auf HTTP
get here gefunden. Es werden jedoch keine Parameter an den Webserver gesendet.
In einer GET-Anforderung übergeben Sie Parameter als Teil der Abfragezeichenfolge.
string url = "http://somesite.com?var=12345";
Mein bevorzugter Weg ist dieser. Es übernimmt das Fluchen und Parsen für Sie.
WebClient webClient = new WebClient();
webClient.QueryString.Add("param1", "value1");
webClient.QueryString.Add("param2", "value2");
string result = webClient.DownloadString("http://theurl.com");
Zuerst ist WebClient
einfacher zu benutzen; GET-Argumente werden in der Abfragezeichenfolge angegeben. Der einzige Trick besteht darin, sich daran zu erinnern, Werte zu entgehen:
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);
}
Das WebRequest-Objekt scheint mir zu viel Arbeit zu sein. Ich bevorzuge die Verwendung des WebClient-Steuerelements.
Um diese Funktion zu verwenden, müssen Sie nur zwei NameValueCollections erstellen, die Ihre Parameter und Anforderungsheader enthalten.
Betrachten Sie die folgende Funktion:
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;
}
Fügen Sie Ihre Querystring-Parameter (falls erforderlich) als NameValueCollection hinzu.
NameValueCollection QueryStringParameters = new NameValueCollection();
QueryStringParameters.Add("id", "123");
QueryStringParameters.Add("category", "A");
Fügen Sie (falls erforderlich) Ihre http-Header als NameValueCollection hinzu.
NameValueCollection RequestHttpHeaders = new NameValueCollection();
RequestHttpHeaders.Add("Authorization", "Basic bGF3c2912XBANzg5ITppc2ltCzEF");
Sie können den Wert auch direkt über eine URL übergeben.
Wenn Sie die Methode public static void calling(string name){....}
aufrufen möchten
dann sollten Sie usingHttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya);
webrequest.Method = "GET";
webrequest.ContentType = "application/text";
anrufen.
Stellen Sie einfach sicher, dass Sie ?Object = value
in der URL verwenden