0

XML ページで応答する POST メソッドを含むフォームを使用して、Web サービスにデータを送信しようとしています。シンプルなフォームで動作する 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 変数を変更しました。

データを投稿した後、他社の Web サーバーから受け取った応答は次のとおりです。

<?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 に答える