强制 xml 返回某些 Web api 控制器,同时保持默认 JSON

2024-01-07

我们正在做一些 azure 商店集成,其资源提供程序代码要求我们使用 xml 作为返回格式化程序。然而,我们只想将 XML 与 Azure 内容一起使用,而保留默认的 JSON 格式化程序。

那么,有谁知道如何强制特定控制器/方法的 Web api 始终返回 xml,而不会在应用程序启动时干扰全局格式化程序?

使用 MVC 4.5 和代码主要基于https://github.com/MetricsHub/AzureStoreRP https://github.com/MetricsHub/AzureStoreRP,我只是将 Web API 内容移至我们自己的服务中,并修改数据层以使用我们的后端而不是它所具有的实体框架后端。


如果您希望始终从特定操作发回 Xml,您可以执行以下操作:

public HttpResponseMessage GetCustomer(int id)
{
    Customer customer = new Customer() { Id  =1, Name = "Michael" };

    //forcing to send back response in Xml format
    HttpResponseMessage resp = Request.CreateResponse<Customer>(HttpStatusCode.OK, value: customer,
        formatter: Configuration.Formatters.XmlFormatter);

    return resp;
}

您可以仅使用特定于某些控制器的格式化程序。这可以通过一个称为Per-Controller Configuration:

[MyControllerConfig]
public class ValuesController : ApiController

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class MyControllerConfigAttribute : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
    {
        // yes, this instance is from the global formatters
        XmlMediaTypeFormatter globalXmlFormatterInstance = controllerSettings.Formatters.XmlFormatter;

        controllerSettings.Formatters.Clear();

        // NOTE: do not make any changes to this formatter instance as it reference to the instance from the global formatters.
        // if you need custom settings for a particular controller(s), then create a new instance of Xml formatter and change its settings.
        controllerSettings.Formatters.Add(globalXmlFormatterInstance);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制 xml 返回某些 Web api 控制器,同时保持默认 JSON 的相关文章

随机推荐

  • 有哪些大型网站正在使用 Amazon EC2 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找托管在 Amazon EC2 S3 Cloudfront 等上的大型网站的示例 我在一家公司工作 我们运行一个网站 该网站每月在运行 10
  • Delphi中如何检测打印机型号?

    当我插入 HP Laserjet 3015 时 Windows 会检测到正确的型号 然后尝试安装适当的驱动程序 如何检测所连接打印机的型号 我不想使用已安装打印机的列表 因为 Zebra 打印机可以使用通用 纯文本驱动程序进行安装 我是一名
  • OAuth (Instagram) 无需刷新

    我有一个单页 JavaScript 应用程序 我想知道是否可以在不刷新页面的情况下对 Instagram 上的用户进行身份验证 我想尝试使用 javascript 执行类似于 Facebook 连接的操作 其中 Facebook 对话框在弹
  • 为什么编译器需要.java后缀而解释器不需要.class后缀?

    编译 Foo java javac Foo java 运行程序 java Foo 为什么编译器需要 java后缀但解释器不需要 class suffix 正如其他几个答案所解释的那样 Java 编译器采用文件名作为参数 而解释器采用类名 所
  • Android 操作栏向上导航按钮在设备上不起作用

    Action Bar up navigation button works fine in emulator but does not work in device can any one help me out 主要活动 Override
  • 从android中的服务调用BroadCastReceiver来更新Fragment中的UI?

    我想更新UI of a fragment from service 我在用GCM用于发送消息 我有这个课程GCM public class GcmIntentService extends IntentService public GcmI
  • 来自阻塞(具有重叠 I/O 属性)Winsock2 调用的意外 WSA_IO_PENDING

    简洁版本 使用阻塞套接字 API 调用时 我收到 WSA IO PENDING 我该如何处理 插座有重叠 I O 属性 https support microsoft com en gb help 181611 socket overlap
  • qtcreator 在“停止”时发送的信号

    我正在 Linux 上工作 当我使用 Qt 创建者 IDE 上的 停止 按钮关闭应用程序时 我意识到我的应用程序留下了守护进程 我想处理这些情况 以便应用程序以与关闭主窗口相同的方式关闭 要编写处理程序 我需要知道它对应于哪些信号 深入研究
  • 使用 rowindex 从 JTable 检索行数据

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何从 a 中检索行数据JTable
  • Jetpack Compose 应用程序无法在 AVD 上启动

    我已经使用编写了一个示例Jetpack Compose然后每当我尝试Install它在一个AVD gradle 构建Project成功 但内置应用程序未启动 关于工具和代码的一切都很好 甚至Preview shows UI好吧 如果我自己手
  • 使用ajax保存wordpress设置api选项,

    我已经和这个问题斗争了一段时间了 我有一个主题的选项页面 并注册了一个选项 我一直试图在每次用户按下保存按钮时通过ajax更新选项 这是我的代码 JS function save main options ajax main options
  • MySQL MATCH AGAINST 不起作用

    我实际上正在开发一个网站 其中有两个几乎相同的表 其中 MATCH AGAINST 在一个表上有效 但在另一个表上无效 为了找出为什么我试图将其简化为一个简单的问题 让我们制作一个简单的表格 但事实并非如此 我正在使用 phpMyAdmin
  • typeid(T) 是在运行时还是编译时评估?

    我无法在任何地方找到这个看似简单的问题的答案 以下 C 函数是否使用 RTTI 当然不必 但我想知道是否可以保证 typeid 将在编译时确定 template
  • WaitAndRetryPolicy 与 BulkheadPolicy 结合,优先重试。是否可以?

    我正在评估Polly https github com App vNext Polly 库的功能和灵活性方面 作为评估过程的一部分 我试图将WaitAndRetryPolicy与BulkheadPolicy政策 以实现弹性和节流的结合 问题
  • 使用 Jackson 解析 Java 中的 JSON 子集

    给定一个 Json 是否可以使用 Jackson 只解析出消息的一部分 假设我感兴趣的数据埋藏在深层的字段层次结构中 并且我根本不关心为每个类创建 DTO 类 给定一个非常简单的场景 我想对 Telephone 类进行建模 而不了解其之前的
  • CUDA 错误:调用 cublasCreate(handle) 时出现 CUBLAS_STATUS_ALLOC_FAILED

    当我在 Google Colab 中运行 PyTorch 深度学习模型时 出现以下错误 usr local lib python3 6 dist packages torch nn functional py in linear input
  • 如何使用 Selenium 和 Python 在信用卡号字段中输入日期?

    我正在尝试制作一个脚本来自动在 Shopify 网站上结帐 当我尝试填写要求信用卡的字段时 硒不允许我将密钥发送到该字段中 并表示该元素不可交互 我已经尝试单击它 但它仍然不允许我输入信息 有人知道该怎么办吗 driver find ele
  • Gradle 与编译器

    据我了解 Gradle 是 Android Studio 的包生成器 它在构建时整理与项目相关的资源 源代码和配置文件 但它也会编译代码吗 或者它将资源和依赖项转换为某种形式的可编译代码 然后将其发送给编译器 从我一直在做的所有阅读来看 这
  • 如何在 Xamarin Android 中使用 ActivityResultContract?

    我试图在 Xamarin 中使用 AndroidX 的 ActivityResultContract 但找不到任何相关文档或信息 我已经在本机android中实现了ActivityResultLauncher ActivityResultC
  • 强制 xml 返回某些 Web api 控制器,同时保持默认 JSON

    我们正在做一些 azure 商店集成 其资源提供程序代码要求我们使用 xml 作为返回格式化程序 然而 我们只想将 XML 与 Azure 内容一起使用 而保留默认的 JSON 格式化程序 那么 有谁知道如何强制特定控制器 方法的 Web