繁体   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