В soap я хочу передать пространство имен тегу заголовка в C# - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь реализовать веб-сервис в веб-приложении. веб-сервис требует отправки учетных данных в заголовке. Также в теге заголовка есть пространство имен. Я использовал класс, унаследованный от AddressHeader, чтобы добавить учетные данные, но теперь мне нужно добавить пространство имен к этому заголовку.
Вот результат XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <wes:auth xmlns:wes="http://asdf.org">
            <u>tester</u>
            <p>tester</p>
        </wes>
    </soap:Header>
    <soapenv:Body>
        <get:GetCustomer xmlns:get="http://werty.org">
            ...
        </get:GetCustomer>
    </soapenv:Body>
</soapenv:Envelope>

1 Ответ

0 голосов
/ 21 января 2020

Мне нравится делать это с xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication151
{
    class Program
    {
        static void Main(string[] args)
        {
            string user = "jsmith";
            string password = "abcdefg";
            string inputs =
                "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                    "<soap:Header xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                        "<wes:auth xmlns:wes=\"http://asdf.org\">" +
                        "</wes:auth>" +
                    "</soap:Header>" +
                    "<soapenv:Body>" +
                        "<get:GetCustomer xmlns:get=\"http://werty.org\">" +
                        "</get:GetCustomer>" +
                    "</soapenv:Body>" +
                "</soapenv:Envelope>";

            XDocument doc = XDocument.Parse(inputs);
            XElement wes = doc.Descendants().Where(x => x.Name.LocalName == "auth").FirstOrDefault();
            List<XElement> authorization = new List<XElement>() {
                new XElement("u", user),
                new XElement("p", password)
            };
            wes.Add(authorization);
        }
    }
}
...