【发布时间】:2017-10-19 14:47:49
【问题描述】:
在一个 ASP.NET 应用程序中,用户(“用户 A”)可以使用 SOAP 设置他们自己的 Web 服务连接,我让他们插入自己的信封,例如,可能是这样的:
//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>"
同时,我是一个“用户 B”,它发送一个数据数组,从 Javascript 作为 json 传递下来,看起来有点像这样:
[
{
key: "F1",
value: "A"
},
{
key: "F2",
value: "B"
},
{
key: "F3",
value: "C"
}
];
此数组在反序列化之前作为字符串进入竞争 (dynamic JsonObject = JsonConvert.DeserializeObject(stringifiedJson);)。
现在,我希望能够将相应的值插入信封,最好具有一定程度的安全性,不允许人们通过在数组中插入奇怪的值来做时髦的事情(正则表达式可能是我的最后的手段)。
到目前为止,我知道像这样构建字符串的概念(肥皂消息中的 {} 被 {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);
但是这个数组中的值的数量以及可能会根据用户的输入以及引用顺序的变化而变化,所以我需要一些更灵活的东西。我对进行 SOAP 调用非常陌生,所以尽可能愚蠢的答案将不胜感激。
【问题讨论】:
-
您是否评估过任何现有的模板引擎,例如
nustache(github.com/jdiamond/Nustache) 或handlebars.net(github.com/rexm/Handlebars.Net)? -
我没有,因为我不能随意向这个项目添加新库。因此,不需要这些的选项将具有优先权。
标签: javascript c# asp.net web-services soap