Saludos, actualmente me encuentro en la creación de un servicio web que recibe xml y Json dentro de los encabezados, por lo que tengo algunos Endpoints que de igual manera, retornan xml y json.
Mi problema está cuando la entrada de mi xml tiene como encabezado un UTF-16, encabezado que no puede ser cambiado por exigencias del cliente.
Ejemplo
Web Api .NET FRAMEWORK
[HttpPost]
public async Task<IHttpActionResult> RegisterNewDocument(DocumentElement model)
{
return Content(HttpStatusCode.OK, new { data="correcto"}, Configuration.Formatters.XmlFormatter);
}
XML
Con este funciona correctamente
"<?xml version="1.0" encoding="utf-8"?>
<DocumentElement xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DatosGenerales>
<Estado>0</Estado>
<ProcedenciaCodigo>412-14</ProcedenciaCodigo>
<ProcedenciaNombre>procede</ProcedenciaNombre>
<EntroUrgencia>1</EntroUrgencia>
<AreaServicioCodigo>ABC123</AreaServicioCodigo>
<AreaServicioNombre>OTHER</AreaServicioNombre>
<IpOrdenador>192.168.16.47</IpOrdenador>
</DatosGenerales>
</DocumentElement>
Con este siempre llega en null la entrada
"<?xml version="1.0" encoding="utf-16"?>
<DocumentElement xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DatosGenerales>
<Estado>0</Estado>
<ProcedenciaCodigo>412-14</ProcedenciaCodigo>
<ProcedenciaNombre>procede</ProcedenciaNombre>
<EntroUrgencia>1</EntroUrgencia>
<AreaServicioCodigo>ABC123</AreaServicioCodigo>
<AreaServicioNombre>OTHER</AreaServicioNombre>
<IpOrdenador>192.168.16.47</IpOrdenador>
</DatosGenerales>
</DocumentElement>
MODELO
/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class DocumentElement
{
private DocumentElementDatosGenerales datosGeneralesField;
///props ......
}
WebApi.config
public static void Register(HttpConfiguration config)
{
config.Formatters.Add(new XmlMediaTypeFormatter());
Encoding utf16 = Encoding.GetEncoding("utf-16");
config.Formatters.XmlFormatter.SupportedEncodings.Add(Encoding.Unicode);
config.Formatters.XmlFormatter.UseXmlSerializer = true;
// Rutas de API web
config.MapHttpAttributeRoutes();
//config.Formatters.Remove(config.Formatters.XmlFormatter);
}