Reputation: 7550
I am trying to build a API which will take XML as request data.
My controller action:
[HttpPost]
[Route("/api/MyApi/CalculateMyPrice")]
public virtual ActionResult<IEnumerable<string>> CalculateMyPrice(Request request)
{}
My model classes are :
public partial class Request
{
public RequestHeader ReqHdr { get; set; }
}
public partial class RequestHeader
{
public string MsgId { get; set; }
}
and my XML format setup :
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddXmlSerializerFormatters();
}
But when I try to access this method using POSTMAN I am getting this error:
InvalidOperationException:
<Request xmlns='urn:com.mysystems:api-message.002'>
was not expected.
But when I remove xmlns=
from request XML, I get the proper response.
Maybe I am missing something here? Any ideas?
Upvotes: 2
Views: 1065
Reputation: 23314
When applying an xml namespace
in the xml
payload, you must also indicate that the corresponding model/class is using and is expecting this namespace.
To do so, you decorate your class with an XmlRootAttribute
.
[XmlRoot(Namespace ="urn:com.mysystems:api-message.002")]
public partial class Request
{
public RequestHeader ReqHdr { get; set; }
}
public partial class RequestHeader
{
public string MsgId { get; set; }
}
Upvotes: 3