Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何显示XML正文元素值C?_C#_Xml_Api - Fatal编程技术网

C# 如何显示XML正文元素值C?

C# 如何显示XML正文元素值C?,c#,xml,api,C#,Xml,Api,我正在从事一个项目,在这个项目中,我在.Net Framework上托管了一个C web API。当我使用XML负载向该端点发送post时,我希望返回负载中的一个元素作为对post的响应 这是有效载荷: POST /api/DD_Reg HTTP/1.1 Host: localhost:123 Content-Type: application/xml <?xml version="1.0" ?> <Message> <ProductId>

我正在从事一个项目,在这个项目中,我在.Net Framework上托管了一个C web API。当我使用XML负载向该端点发送post时,我希望返回负载中的一个元素作为对post的响应

这是有效载荷:

POST /api/DD_Reg HTTP/1.1
Host: localhost:123
Content-Type: application/xml
<?xml version="1.0" ?>
<Message>
<ProductId>10</ProductId>
</Message>
我得到一个错误,说:

{
"Message": "An error has occurred.",
"ExceptionMessage": "Value cannot be null.\r\nParameter name: s",
"ExceptionType": "System.ArgumentNullException",
"StackTrace":  at System.IO.StringReader..ctor(String s)\r\n   at System.Xml.XmlDocument.LoadXml(String xml)\r\n   at CollectNet.Controllers.DD_RegController.Post(String inXML) in \\"file location"\\Controllers\\DD_RegController.cs:line 23\r\n   at lambda_method(Closure , Object , Object[] )\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()"
}
我已经尝试了很多东西,并且为此奋斗了几个小时。似乎无论我做什么,C端都看不到XML主体。最终结果应该是端点在本例中显示数字10

请帮忙

…除了这篇文章,这里是邮递员发送数据的快照

更新问题后,问题不在xml中,但参数始终为空。 我已通过以下陡度局部修复了此问题:

1-我已在App_Start WebApiConfig中添加:

使用xmlSerializer,因为Web Api默认使用DataContractSerializer

2-添加类消息:

3-张贴方法:

public string Post([FromBody]Message message)
{
    return message?.ProductId;
}
结果

请注意,如果已选中,请验证Postman中是否未选中Content Type=>application/json


我希望这对您有所帮助。

堆栈跟踪将非常有用,因为它有助于调试与此完全相同的场景。这回答了你的问题吗@培根谢谢你的帖子,我尝试了那个链接,但仍然没有成功。。。我将编辑此帖子并添加完整的StackTrace:-
config.Formatters.XmlFormatter.UseXmlSerializer = true;
public class Message
{
    public string ProductId { get; set; }
}
public string Post([FromBody]Message message)
{
    return message?.ProductId;
}
10