[英]Why HttpWebRequest and method POST data is not seen by the server
當我使用 HttpWebRequest 和方法 POST 發布到服務器時,asp 代碼中的 NameValueCollection 沒有值。 我有與其他服務器頁面相同的代碼,唯一的區別是發布的字符串數據有點不同。
發布的代碼來自 c# 桌面應用程序:
string responseFromServer = string.Empty;
System.Net.HttpWebRequest request = null;
System.IO.StreamReader reader = null;
System.Net.HttpWebResponse response = null;
string http = string.Empty;
http = "http://www.apageonmywebsite.aspx";
request = HttpWebRequest.Create(http) as HttpWebRequest;
request.Method = "POST";
UTF8Encoding encoding = new UTF8Encoding();
//send a namevalue pair -that is what the website expects via the request object
string postData = "TRIALID=" + System.Web.HttpUtility.UrlEncode(trialUserID, encoding);
byte[] byte1 = encoding.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byte1.Length;
request.Timeout = 20000;
System.IO.Stream newStream = request.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
System.Threading.Thread.Sleep(1000);
response = (HttpWebResponse)request.GetResponse();
System.IO.Stream dataStream = response.GetResponseStream();
reader = new System.IO.StreamReader(dataStream);
responseFromServer = reader.ReadToEnd();
if (responseFromServer.Contains("\r"))
{
responseFromServer = responseFromServer.Substring(0, responseFromServer.IndexOf("\r"));
}
服務器代碼:
NameValueCollection postedValues = Request.Form; // Request.Form worked locally, failed on server(count=0)
IEnumerator myEnumerator = postedValues.GetEnumerator();
try
{
foreach (string s in postedValues.AllKeys)
{
if (s == "TRIALID")
{
regcode += postedValues[s];
break;
}
}
}
catch (Exception ex)
{
Response.Clear();
Response.Write("FAILED");
this.resultMsg = "FAILED. Exception: " + ex.Message;
LogResult();
return;
}
if (string.IsNullOrEmpty(regcode))
{
Response.Write("postedvalues count=" + postedValues.Count.ToString() + ": no regcode:");
this.resultMsg ="postedvalues count=" + postedValues.Count.ToString() + ": no regcode:";
LogResult();
return;
}
在發送應用程序中,responseFromServer 是postedvalues count=0:no regcode:
所以數據被發布但在服務器上沒有“看到”。
urlencode 方法中使用的trialUserID字段是一個字符串,包含用戶域名加上來自 Environment object 的用戶名加上機器名。
我自己的問題的答案是 url 需要是 https 而不是 http。 一年前,我將我的 asp.net 網站轉換為 https,當我創建發送發布數據的應用程序時,我假設由於整個網站配置為自動重定向到 Z5E056C500A1C4B6A7110B50D80BADE5Z5,所以應該小心。 顯然,webrequest 需要 url 中硬編碼的 https。
剛剛嘗試單擊“接受”按鈕,但由於我回答了自己的問題,兩天內不允許這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.