C # - Размещение XML на сайте MVC - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь опубликовать строку XML на локальном веб-сайте, работающем на моем компьютере. Мой XML генерируется из следующего c #:

public string CreateOrderToSend(CreateOrderModel OrderModel, byte[] data, string username, string password, string searchPack)
        {
                // new string for storing orderPlacement xml instructions
                string xml_OP = "";
                // start populating with data (maybe from params?)
                using (TextWriter strWriter = new Utf8StringWriter())
                {
                    using (XmlTextWriter xmlWriter = new XmlTextWriter(strWriter))
                    {
                        // not sure if this is needed
                        xmlWriter.WriteStartDocument(false);

                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteStartElement("OrderPlacement");
                        xmlWriter.WriteAttributeString("xmlns", "hidden");
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteStartElement("Authentication");
                        xmlWriter.WriteAttributeString("xmlns", "hidden");
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("Username", username);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("Password", password);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteEndElement(); // Authentication
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteElementString("FileReference", OrderModel.FileRef); // FileReference
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteStartElement("Address");
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("PropertyIdentifier", OrderModel.Address1);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("Street", OrderModel.Address2);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("Town", OrderModel.Address3);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("Postcode", OrderModel.Address4);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteEndElement(); // Address
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteElementString("UPRN", OrderModel.UPRN); // UPRN
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteElementString("NewBuild", OrderModel.NewBuild.ToString().ToLower()); // NewBuild
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteStartElement("SitePlanEmbeddedObject"); // (base64 - stream)
                        xmlWriter.WriteAttributeString("Name", "pdfName.pdf");
                        xmlWriter.WriteAttributeString("ContentType", "Application/Pdf");
                        xmlWriter.WriteString(data.ToString()); // base64 string
                        xmlWriter.WriteEndElement(); // SitePlan
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteStartElement("Pack");
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteElementString("PackCode", searchPack);
                        xmlWriter.WriteWhitespace("\n");
                        xmlWriter.WriteEndElement(); // Pack (foreach - can be more than one pack)
                        xmlWriter.WriteWhitespace("\n\n");

                        xmlWriter.WriteEndDocument(); // OrderPlacement
                        xmlWriter.Flush();

                        xml_OP = strWriter.ToString();
                    }
                }
                string newstring = xml_OP;
                return newstring;
        }

Чтобы переместить данные на сайт, я запускаю это (xmlContent заполняется с помощью вышеуказанного метода xmlWriter):

postXMLData("http://localhost:41092/Home/Order/", xmlContent);

Мой метод postXMLData выглядит следующим образом.

public string postXMLData(string destination, string xmlContent)
    {
        for (int i = 0; i < NumberOfRetries; i++)
        {
            string byteValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(xmlContent));
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destination);
                byte[] bytes = Encoding.ASCII.GetBytes(xmlContent);
                request.ContentType = "application/x-www-form-urlencoded";
                //request.ContentType = "text/xml; encoding='utf-8'";
                request.ContentLength = bytes.Length;
                request.Method = "POST";
                Stream req = request.GetRequestStream();
                req.Write(bytes, 0, bytes.Length);
                req.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream respStream = response.GetResponseStream();
                string respString = new StreamReader(respStream).ReadToEnd();
                {
                    string responseStr = new StreamReader(response.GetResponseStream()).ReadToEnd();
                    return responseStr;
                }
                return null;
            }
            catch (Exception ex)
            {
                if (i == NumberOfRetries)
                {
                    return null;
                }
            }
        }
        return null;
    }

У меня простой веб-сайт mvc с почти пустым контроллером. При запуске метода postXMLData в моем контроллере достигается точка останова, но значение входящего XML равно нулю. При перетаскивании 'this' в мое окно наблюдения значение в this.Request.Form.Allkeys [0] равно "<?xml version".

public class HomeController : Controller
    {
        [HttpPost]
        public ActionResult Order(string incomingXML)
        { // breakpoint is here
            var content = this.Request.Form.AllKeys;
            return null;
        }
    }

Я должен быть довольно близко, если что-то есть в поле AllKeys, но кажется, что оно сокращается? Или сайт MVC - неправильное решение для передачи XML? Может быть, веб-API? Помогите пожалуйста!

1 Ответ

0 голосов
/ 28 июня 2018

Обновление:

XML не был правильно проанализирован из-за символов "=", которые у меня были в моих атрибутах xml, странно. Я закомментировал это, и значение XML было успешно сохранено в поле:

this.Request.Form.AllKeys[0]

Возможно, мне придется проанализировать значения атрибутов отдельно в XML и динамически вставить их в мой MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...