【问题标题】:Why HttpWebRequest and method POST data is not seen by the server为什么服务器看不到 HttpWebRequest 和方法 POST 数据
【发布时间】:2019-10-01 07:49:42
【问题描述】:

当我使用 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 对象中的用户名加上机器名。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    回答我自己的问题是,网址必须是 https 而不是 http。 一年前,我将我的 asp.net 网站转换为 https,当我创建发送发布数据的应用程序时,我假设因为整个网站都配置为自动重定向到应该处理它的 https。显然,webrequest 需要在 url 中硬编码 https。

    刚刚尝试单击“接受”按钮,但自从我回答了自己的问题以来,这两天都不允许这样做。

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多