0

我正在尝试使用带有 POST 方法的表单将一些数据发送到 Web 服务,它使用 XML 页面对其进行响应。我的 POST 部分使用简单的表单并在我的视图中提交。但是,我不确定如何处理来自这里的响应,所以我试图将它全部移到控制器中(似乎它应该在那里)。所以理论上是让用户点击一个按钮,将模型数据发送到控制器。在控制器中,我试图组合一个 webrequest,如下所示:

    [HttpPost]
    public ActionResult SubmitToCris(NewApplicantViewModel model)
    {
        string serviceURL = "https://www.blahblah.com/XMLServer/XMLServer.cgi";

        string postData = "MaxRecords=0&UserID=skapi&Password=sk12024&Version=2.0&RequestType=searchName&FirstName=Nathan"
                                    + "&LastName=Smith&DOB=1984/2/2";

        WebRequest request = WebRequest.Create(serviceURL);
        request.Method = "POST";

        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = byteArray.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse response = request.GetResponse();
        dataStream = response.GetResponseStream();

        StreamReader reader = new StreamReader(dataStream);

        return View();

    }

我似乎没有得到回应,所以我挖了一个发现“流不支持搜索操作”。看起来这是由于无法读取字节数组的长度造成的。我将通过循环修复它。

所以我现在正在寻找的是,这甚至是正确的方法吗?我整个早上都在研究这个,并想出了多种方法,我选择了这个,因为它似乎是最直接的方法。

任何人,如果我能得到一个 MVC 或 ASP 特定的示例或教程来说明这一切应该如何工作,那就太好了。谢谢。

- - - -编辑 - - - - - - -

更改了 postData 变量。

这是我在发布数据后从其他公司的网络服务器收到的响应:

<?xml version="1.0" encoding="UTF-8"?>
  <HistoryResponse>
  <ResponseType>resultsList</ResponseType>
  <Matches>0</Matches>
  <SessionID>75803234r23df3de</SessionID>
  <RecStart>0</RecStart>
  <ClientCode></ClientCode>
  <Results></Results>
</HistoryResponse>
4

1 回答 1

0

我花了几天时间研究和询问如何从 MVC 控制器发布一些数据,然后获取 XML 响应。我很惊讶在网上没有找到答案,我只能假设我的搜索参数有问题,因为这似乎不是一件深奥的事情。任何人,我想我会发布我的工作代码,以防它对某人有用。免责声明 - 我几个月前才开始编码,所以即使这可行,我也不保证这是最好的方法。:-)

    [HttpPost]
    public ActionResult SubmitToCris(NewApplicantViewModel model)
    {
        // Setup my variables
        string First = model.PersonModel.FirstName;
        string Last = model.PersonModel.LastName;
        string dob = model.PersonModel.DateofBirth.ToString("yyyy-MM-dd");

        string historyURL = "https://www.nunya.com/XMLServer/XMLServer.cgi";
        //Build my data to be sent in key/value pair string 
        string postData = "MaxRecords=0&UserID=skapi&Password=sk12024&Version=2.0&RequestType=searchName&FirstName="
                                    + First + "&LastName="
                                    + Last + "&DOB="
                                    + dob;

        //Create the web request, populate the header info
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(crisURL);
        request.Method = "POST";
        request.ContentLength = postData.Length;
        request.ContentType = "application/x-www-form-urlencoded";

        // Send it
        using (Stream writeStream = request.GetRequestStream())
        {
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            writeStream.Write(byteArray, 0, byteArray.Length);
            writeStream.Close();
        }

        // Receive the response and do stuff with it.
        string result = string.Empty;

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using( Stream responseStream = response.GetResponseStream() )
            {
                using( StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
                {
                    result = readStream.ReadToEnd();
                }

            }
        }

        XDocument resultLoad = XDocument.Parse(result);
        ViewBag.XmlResponse = resultLoad.ToString();

        return View();

    }

在这个时候,我对响应做的不多,它只不过是一个字符串。我个人需要根据返回的数据存储一些信息并格式化几个视图。一旦我把它整理好,我会发布它,但我现在想把它拿出来。

于 2012-12-12T16:01:47.850 回答