Posto
Posto

Reputation: 7550

ASP.NET Core Web API : xmlns was not expected

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:

enter image description here

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

Answers (1)

pfx
pfx

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

Related Questions