W aplikacji ASP.NET, w której użytkownicy ("Użytkownik A") mogą konfigurować własne połączenia usług WWW przy użyciu protokołu SOAP, pozwalam im wstawiać własne koperty, które na przykład, może być coś wzdłuż tych linii:Wstawianie wartości z tablicy do komunikatu SOAP na podstawie klucza
//Formatted for Clarity
string soapMessage =
"<soap: Envelope //StandardStuff>
<soap:Header //StandardStuff>
<wsse:UsernameToken>
<wsse: Username>{F1}</wsse:Username>
<wsse: Password Type''>{F2}</wsse:Password>
</wsse:UsernameToken>
</soap:Header>
<soap:Body>
<ref:GetStuff>
<ref:IsActive>{F3}</ref:IsActive>
</ref:GetStuff>
</soap:Body>
</soap:Envelope>"
Jednocześnie I a „User B”, który wysyła tablicę danych, przekazywane z JavaScript jak JSON, który wygląda trochę coś takiego:
[
{
key: "F1",
value: "A"
},
{
key: "F2",
value: "B"
},
{
key: "F3",
value: "C"
}
];
Ta tablica wprowadza próbkę jako ciąg przed deserializacją (dynamic JsonObject = JsonConvert.DeserializeObject(stringifiedJson);
).
Teraz chciałbym móc wstawić odpowiednie wartości do koperty, najlepiej z pewnym stopniem bezpieczeństwa, który nie pozwoli ludziom robić fajnych rzeczy przez wstawianie dziwnych wartości w tablicy (regex prawdopodobnie byłby moja ostatnia deska ratunku).
tej pory jestem świadomy koncepcji zbudować ciąg jak tak (z {}
JEST W komunikacie mydła zastępowane przez {0}, {1} & {2}
):
string value1 = "A";
string value2 = "B";
string value3 = "C";
var body = string.Format(@soapMessage, value1, value2, value3);
request.ContentType = "application/soap+xml; charset=utf-8";
request.ContentLength = body.Length;
request.Accept = "text/xml";
request.GetRequestStream().Write(Encoding.UTF8.GetBytes(body), 0, body.Length);
ale ilość wartości w tej tablicy jak również moc może się zmieniać w zależności od danych wprowadzanych przez użytkownika, a także od zmiany kolejności referencji, więc potrzebuję czegoś bardziej elastycznego. Jestem bardzo nowy w nawiązywaniu połączeń SOAP, więc doceniłbym głupią odpowiedź.
Czy oceniłeś już istniejące silniki szablonowe, takie jak 'nustache' (https://github.com/jdiamond/Nustache) lub' handlebars.net' (https://github.com/rexm/Handlebars.Net)? –
Nie mam, ponieważ nie mam prawa dodawać nowych bibliotek do tego projektu. Jako taka opcja, w której nie są one wymagane, miałaby pierwszeństwo. – Patrick