8

我们正在做一些 azure store 集成,它的资源提供程序代码要求我们使用 xml 作为返回格式化程序。但是,我们只想将 XML 与 Azure 的东西一起使用,而不要使用默认的 JSON 格式化程序。

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

使用 MVC 4.5 和主要基于https://github.com/MetricsHub/AzureStoreRP的代码,我只是将 web api 的东西移到我们自己的服务中,并修改了数据层以使用我们的后端而不是它拥有的实体框架后端。

4

1 回答 1

17

如果您希望始终从特定操作发送回 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);
    }
}
于 2013-07-22T16:57:49.130 回答