【问题标题】:c# asmx web service. How to read in post data from aspx pagec# asmx web 服务。如何从aspx页面读入post数据
【发布时间】:2014-02-11 19:34:46
【问题描述】:

我正在使用 c# 为我的公司编写 Web 服务。所以我有一个测试页default.aspx。 从 aspx 页面我有一个输入 name="zip" 我需要传递给 web 服务。 我不知道如何获取发布的数据。 Webservice 将根据作为 xml 传递的邮政编码运行 sql 语句。然后返回邮政编码 xml 作为响应。

下面aspx页面的代码。

string sendXml = String.Format(@"<?xml version=""1.0"" encoding=""utf-8""?>,
                            <zip>{0}</zip>",
                                Request["zip"]);
                string postXml = "xmlRequest=" + HttpUtility.UrlEncode(sendXml);
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:51857/zipfinder.asmx/showRecords");
                req.Method = "POST";
                req.ContentLength = postXml.Length;
                req.ContentType = "application/x-www-form-urlencoded";

                using (StreamWriter writer = new StreamWriter(req.GetRequestStream()))
                {
                    writer.Write(postXml);
                    writer.Close();
                }

                var result = "";
                try
                {
                    using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
                    {
                        string getResult = reader.ReadToEnd();
                        Response.Write(getResult);
                    }
                }
                catch (Exception ex)
                {
                    Response.Write("error: " + ex.ToString());
                }

然后在 .asmx 页面上

[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
        public DataSet getZip() {            
            DataSet dataSet = db.QueryDataRows("*", "zip_codes_simple", "zip = '00501' or zip = '00544'", "", "zip_codes_simple");
            return dataSet;
        }

        [WebMethod]
        public XmlDocument showRecords(){
            DataSet dataSet = getZip();
            string recs = "";
            XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
            doc.AppendChild(dec);
            XmlNode root = doc.CreateElement("zipcodes");
            doc.AppendChild(root);
            XmlElement zip = doc.CreateElement("zip");
            XmlElement type = doc.CreateElement("type");
            XmlElement primaryCity = doc.CreateElement("primaryCity");
            XmlElement state = doc.CreateElement("state");
            XmlElement latitude = doc.CreateElement("latitude");
            XmlElement longitude = doc.CreateElement("longitude");

            foreach (DataTable dt in dataSet.Tables)
            {
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        zip.InnerText = dr["zip"].ToString();
                        root.AppendChild(zip);
                        type.InnerText = dr["type"].ToString();
                        root.AppendChild(type);
                        primaryCity.InnerText = dr["primary_city"].ToString();
                        root.AppendChild(primaryCity);
                        state.InnerText = dr["state"].ToString();
                        root.AppendChild(state);
                        latitude.InnerText = dr["latitude"].ToString();
                        root.AppendChild(latitude);
                        longitude.InnerText = dr["longitude"].ToString();
                        root.AppendChild(longitude);
                        //recs = "<p>" + dr["zip"] + ", " + dr["primary_city"] + "</p>";
                        //Response.Write("<p>" + dr["zip"] + " in " + dr["state"]);
                    }
                }
                else
                {
                    //recs = "<p style='color: red;'>Invalid user name or password</p>";
                }
            }

            return doc;
        }

如何从 aspx 页面获取邮政编码以传递给 zip = '' 的查询 我正在寻找可以在格式化字符串中读取的内容,并从传入的 xml 文档中提取邮政编码。

任何帮助表示赞赏。 谢谢

【问题讨论】:

    标签: c# web-services


    【解决方案1】:

    如果我理解正确,您想从页面中的&lt;input type='text' name='zip' /&gt; 获取值。由于它不是asp:TextBox,因此您应该使用Request.Form 获取它,因此您的代码将如下所示:

    string sendXml = String.Format(@"<?xml version=""1.0"" encoding=""utf-8""?>,
                                <zip>{0}</zip>",
                                    Request.Form["zip"]);
    

    但还有另一种解决方案:不要这样做:

    <input type='text' name='zip' />
    

    您可以使用 ASP.NET Webform 控件:

    <asp:TextBox runat='server' ID='zip' />
    

    然后您可以使用zip.Text 获取值。

    你有什么理由不这样做吗?

    【讨论】:

    • 是的,因为我们有一个不支持内联服务器标签的 cms。 asmx 文件中有没有办法可以调用 xml 邮政编码。 aspx 中的示例我可以使用 Request["field"],但是,我还没有看到一种方法来引用传入的 xml。基本上我需要一些东西来读取那个 xml,读取一个字段并使用 sql 中的值声明。
    • 好的,所以Request["zip"] 工作了吗?如果没有,请尝试Request.Form["zip"]。要从 XML 文档中提取信息,您可以使用 xPath,例如,/zipcodes/zip 将匹配 zipcode 中的所有 zips。由于变量string getResult = reader.ReadToEnd(); 包含响应XML,您可以将其加载到XmlDocument 中,然后使用doc.SelectNodes("/xpath/to/node") 进行查询。我不确定我是否理解您的问题。
    猜你喜欢
    • 2016-02-18
    • 2013-05-15
    • 2011-07-06
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多