簡體   English   中英

為什么服務器看不到 HttpWebRequest 和方法 POST 數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM