我的ASP.NET (.NET框架4.5.1)应用程序中有以下ApiController方法:
[HttpPost]
public void Post([FromBody]XElement value)
{
...
}但是,当我尝试通过Postman在内容中发布原始xml时,value总是空的。
以下是来自Fiddler的更多信息:
POST http://localhost:54193/api/punchoutsetup/post HTTP/1.1
Content-Type: text/xml
cache-control: no-cache
Postman-Token: e2d5563a-061b-4ddc-b03b-6f9d4835c535
User-Agent: PostmanRuntime/7.2.0
Accept: */*
Host: localhost:54193
accept-encoding: gzip, deflate
content-length: 1441
Connection: keep-alive
<?xml version="1.0"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd">
<cXML payloadID="1211221788.71299@ip-10-251-122-83" timestamp="Mon May 19 18:29:48 +0000 2008" xml:lang="en-US">
<Header>
<From>
<Credential domain="DUNS">
<Identity>test</Identity>
</Credential>
</From>
<To>
<Credential domain="DUNS">
<Identity>test</Identity>
</Credential>
</To>
<Sender>
<Credential domain="DUNS">
<Identity>test</Identity>
<SharedSecret>test</SharedSecret>
</Credential>
<UserAgent>Coupa Procurement 1.0</UserAgent>
</Sender>
</Header>
<Request>
<PunchOutSetupRequest operation="create">
<BuyerCookie>c64af92dc27e68172e030d3dfd1bc944</BuyerCookie>
<Extrinsic name="FirstName">Jim</Extrinsic>
<Extrinsic name="LastName"></Extrinsic>
<Extrinsic name="UniqueName">jim</Extrinsic>
<Extrinsic name="UserEmail"></Extrinsic>
<Extrinsic name="User">jim</Extrinsic>
<Extrinsic name="BusinessUnit"></Extrinsic>
<Contact role="endUser">
<Name xml:lang="en-US">jim</Name>
<Email></Email>
</Contact>
<BrowserFormPost>
<URL></URL>
</BrowserFormPost>
</PunchOutSetupRequest>
</Request>
</cXML>为什么它不能识别xml信息?
我看到Debug输出中抛出了以下异常:
Exception thrown: 'System.Web.HttpException' in System.Web.dll
Exception thrown: 'System.Xml.XmlException' in System.Runtime.Serialization.dll
Exception thrown: 'System.Runtime.Serialization.SerializationException' in System.Runtime.Serialization.dll
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dllVisual Studio中有没有更详细的日志来检查出了什么问题?
发布于 2018-08-07 09:46:38
另一种方法是将XML作为原始字符串加载,然后将其解析为XElement。
[HttpPost]
public IHtpActionResult Post([FromBody]string value) {
if(string.IsNullOrWhiteSpace(value))
return BadRequest();
Xelement element = XElement.Parse(value);
//...
}主要问题是,模型绑定器无法将提供的原始数据绑定到所需的模型(在本例中为XElement),因此无法将其设置为默认值null。
要在默认情况下绑定,模型必须具有默认的无参数构造函数,以便模型绑定器初始化模型。XElement不需要。否则,您可能需要创建知道如何处理XElement的自定义参数绑定器
发布于 2021-07-03 02:10:20
我可以通过使用XMLDocument类(System.XML)做一些与@Nkosi类似的事情来实现这一点。
对我起作用的是:
[HttpPost]
public async Task<IHttpActionResult> SomeEndpoint()
{
// parse the string content from the request
var content = await Request.Content.ReadAsStringAsync();
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(content);
var root = xmlDoc.DocumentElement;
// next, get your values using the XML path relative to the root node in the request
var example = GetXmlNodeValue(root, "Path/To/Value");
// then do something with your values and return
return Ok();
}https://stackoverflow.com/questions/51715727
复制相似问题