gpt4 book ai didi

c# - Web Api 调用未在 JSON 响应中返回 __type

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:26 25 4
gpt4 key购买 nike

我们有一个通过调用 WCF Restful 服务的 MVC 网站,但我们现在正在用 Web Api 调用替换它们。问题是一些 MVC Controller 中的现有代码依赖于为 JSON 中的每个对象返回的“__type”属性,因此它可以根据对象的类型做不同的事情。

但是,在新的 Web Api 响应中,每个返回的对象都没有 JSON 中的“__type”条目,因此代码失败。

有人知道这是怎么做到的吗?我发现了很多有关删除 WCF 服务的 __type 条目的信息,但还没有找到关于确保它们适用于 Web Api 的信息。

最佳答案

__type 字段是 DataContractJaonSerializer (DCJS) 的一个特性,特别是它用于 ASP。 NET AJAX 兼容性,适用于配置了 enableWebScript 行为的端点。更具体地说,通过将 DataContractSerilizerSettings::EmitTypeInformation 属性设置为 AsNeededAlways 来控制此功能。

开箱即用的 WebAPI 必然会使用 JSON.NET 作为其 JSON 媒体的格式化程序,虽然它通过其 TypeNameHandling 功能支持类似的概念,但它与 DCJS 不兼容。

现在您可以像这样轻松地切换 WebAPI 以使用 DCJS:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;

然而,这仍然对您没有帮助,因为在这些情况下,他们在内部创建的 DCJS 实例未配置 EmitTypeInformatiom,这意味着它们默认为 None

因此,获得所需内容的唯一解决方案是编写自己的 MediaTypeFormatter 子类,该子类使用您想要的 EmitTypeInformation 设置创建/配置其 DCJS 实例,然后注册用于处理 JSON 媒体类型而不是内置的 JsonMediaTypeFormatter。幸运的是,因为 ASP。 NET web API 是开源的,你应该可以复制 the existing implementation并很容易地调整它以适应这种特定情况。

关于c# - Web Api 调用未在 JSON 响应中返回 __type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13254185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com