【问题标题】:Web API OData format as XMLWeb API OData 格式为 XML
【发布时间】:2014-06-11 15:06:27
【问题描述】:

我正在测试一个使用 OData 和 EF 以从 SQL Server 视图返回结果的 Web API 项目。花了一段时间,但我终于让它工作了。接下来我想做的是使用不同的格式化程序来返回结果。

根据this link,我应该可以使用 $format 参数来选择 atom、json 和 xml。但是这个参数似乎被忽略了。再挖掘一些我发现类似于this one 的文章说你必须添加命令以允许 $format 参数工作但我没有提到我在其他几篇文章中找到的“Configuration.Formatters.XmlFormatter.AddQueryStringMapping” .例如,我已经看到了使用 Fiddler 进行测试和更新以返回 JSON 的参考,但我想使用 $format,因此我也可以在 SSIS 中提取不同的格式。

我找到的最接近的是post,但除了 Fiddler 之外,没有针对 XML 的解决方案,而且 JSON $format 命令对我不起作用。我认为在过去的 4 个月里情况可能发生了变化。

有没有办法让 $format 与 XML 一起工作?

【问题讨论】:

  • 我不确定我是否想将此标记为解决方案,但实现此工作的一种非常糟糕的方法是删除 JSON 作为选项。在 WebApConfig 中,我可以添加命令 config.Formatters.Remove(config.Formatters.JsonFormatter),这会将 JSON 作为默认设置并返回 XML。但是,就像我说的,这似乎是一个糟糕的解决方案。
  • according to this SO answer 如果您使用的是 OData v4 - 您根本无法做到 - 但如果您弄明白了请回复。

标签: odata asp.net-web-api asp.net-web-api2


【解决方案1】:

AddQueryStringMapping 是类中的扩展方法: System.Net.Http.Formatting.MediaTypeFormatterExtensions

如果这不起作用,您可以按照示例进行操作 https://gist.github.com/raghuramn/5556691 始终将请求接受标头设置为 应用程序/xml 或应用程序/atom+xml。

如果您有任何其他问题,请告诉我。

【讨论】:

  • 我添加了对 System.Net.Http.Formatting.MediaTypeFormatter 的引用,但与我引用的第二个链接不同,我仍然看不到 AddQueryStringMapping 作为 GlobalConfiguration.Configuration.Formatters.JsonFormatter 之类的选项。这篇文章中关于 global.asax 的更改确实不多,所以虽然它一定是我做错了,但我看不到它。
  • 在你的代码中使用"using System.Net.Http.Formatting"添加,否则你可以直接调用扩展方法"System.Net.Http.Formatting.MediaTypeFormatterExtensions.AddQueryStringMapping(formatter, "$format ", "json", "应用程序/json")"。顺便问一下,你的项目中添加了webapi nuget包“Microsoft.AspNet.WebApi.Core”吗?
  • 这让我很困惑。我确实有正确的“使用”声明。 Intellisense 会按预期响应,直到我查找“AddQueryStringMapping”。它只是不是列表的一部分。这就是我开始线程的原因。我只能认为也许我的安装已损坏,但它会部分运行会很奇怪。我的另一个想法是该方法已在较新的版本中被取消,但听起来应该存在。
  • 您使用的是最新版本的webapi 5.2吗?如果不行,可以尝试升级webapi版本。
  • 我认为问题可能在于您选择哪种语言。我刚刚创建了一个简单的 C# WebApi 项目,它按预期工作。但同样的事情不适用于 VB WebApi 项目。这在 VB.Net 项目中不起作用有什么原因吗?
【解决方案2】:

我要说这是代码的 VB.Net 版本的问题。如果您切换到 C#,它似乎工作正常。

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2011-10-08
    • 2015-09-04
    • 2013-08-15
    相关资源
    最近更新 更多