Search code examples
c#asp.net-core-webapixml-formatting

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?


Solution

  • 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; }
    }