能否通过携带XML请求体的POST请求调用OData v4服务?
OData v4端点支持POST XML请求吗?
OData v4原生支持XML(Atom Pub格式)作为请求体,所以你完全可以通过POST XML的方式调用OData v4端点。你遇到的"invalid json type for an entity"错误,大概率是下面几个原因导致的:
可能的问题及解决方法
服务端未启用XML格式支持
很多OData v4服务默认只开启了JSON格式支持。比如在ASP.NET Core OData中,需要在配置代码里显式添加XML支持:builder.Services.AddControllers().AddOData(opt => opt.AddRouteComponents("odata", GetEdmModel()) .EnableQueryFeatures() .AddXmlSupport()); // 启用XML格式支持你可以先测试服务端是否支持XML:发送一个GET请求,将
Accept头设为application/atom+xml,如果返回XML格式的响应,说明服务端支持;如果返回JSON或报错,就需要调整服务端配置。XML请求体不符合OData v4规范
OData v4的XML请求必须遵循Atom Pub格式,不是任意XML结构。比如创建实体的XML需要包裹在<entry>标签中,并且要包含正确的命名空间:<entry xmlns="http://www.w3.org/2005/Atom" xmlns:edm="http://docs.oasis-open.org/odata/ns/edm"> <category term="YourNamespace.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme"/> <content type="application/xml"> <edm:Product> <edm:Name>测试商品</edm:Name> <edm:Price>29.99</edm:Price> </edm:Product> </content> </entry>注意替换
YourNamespace.Product为你实际的实体类型名称,确保标签和实体属性一一对应。Content-Type设置错误
OData v4中,XML格式的请求必须使用application/atom+xml作为Content-Type,而不是application/xml。后者是通用XML类型,OData服务可能不会将其识别为合法的OData请求格式,从而默认尝试解析为JSON,导致"invalid json type"错误。
内容的提问来源于stack exchange,提问作者Emir S.
相关产品推荐
相关产品推荐

