Asp.net web api 获取.net核心WebAPI中的xml字符串或反序列化对象
NETCore中的WebAPI可以优雅地处理Json请求,但它似乎无法以本机方式处理XML内容类型 我做了一些搜索,只得到了关于这个的帖子 然而,我试了如下,没有成功Asp.net web api 获取.net核心WebAPI中的xml字符串或反序列化对象,asp.net-web-api,Asp.net Web Api,NETCore中的WebAPI可以优雅地处理Json请求,但它似乎无法以本机方式处理XML内容类型 我做了一些搜索,只得到了关于这个的帖子 然而,我试了如下,没有成功 services .AddMvc() .AddJsonOptions(options => { options.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto; })
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;
})
.AddMvcOptions(options =>
{
//var jsonFormatter = options.InputFormatters.First(o => o.GetType() == typeof(JsonInputFormatter));
//if (jsonFormatter != null) { options.InputFormatters.Remove(jsonFormatter); }
options.InputFormatters.Add(new XmlSerializerInputFormatter());
options.InputFormatters.Add(new XmlDataContractSerializerInputFormatter());
options.RespectBrowserAcceptHeader = true; // false by default
options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter(
new System.Xml.XmlWriterSettings
{
ConformanceLevel = System.Xml.ConformanceLevel.Auto,
WriteEndDocumentOnClose = true
}
));
var a = options.FormatterMappings.GetMediaTypeMappingForFormat("text/xml");
})
.AddXmlSerializerFormatters()
.AddXmlDataContractSerializerFormatters()
;
下面是我的控制器操作
// POST api/values
[HttpPost("Order")]
public string OrderRetrievea([FromBody] OrderRequest request)
{
}
内容类型设置为text/xml
Xml请求:
<?xml version="1.0"?>
<OrderRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.myco.org/ns">
....
</OrderRequest>
....
它(请求)总是空的。你发送的是什么XML?@CodeCaster我刚刚编辑了这个问题以添加更多信息。你的XML有一个名称空间。您的模型是否用该名称空间进行了注释?另请参见@CodeCaster我仍然需要这个名称空间信息来进行模式验证,所以我必须创建自定义XMLFormatter?但在.NETCore中还没有找到任何关于此的帖子。我正在考虑只获取字符串,然后在操作中手动设置格式,但它甚至不允许使用content type=“text/xml”进行设置。如果传入xml上的名称空间与用于反序列化为的模型匹配,那么它也应该可以工作。:)你要发送什么XML?@CodeCaster我刚刚编辑了这个问题以添加更多信息。你的XML有一个名称空间。您的模型是否用该名称空间进行了注释?另请参见@CodeCaster我仍然需要这个名称空间信息来进行模式验证,所以我必须创建自定义XMLFormatter?但在.NETCore中还没有找到任何关于此的帖子。我正在考虑只获取字符串,然后在操作中手动设置格式,但它甚至不允许使用content type=“text/xml”进行设置。如果传入xml上的名称空间与用于反序列化为的模型匹配,那么它也应该可以工作。:)