如何在ASP.NET Web Api中使用text / xml媒体类型进行响应

时间:2015-02-02 09:18:37

标签: c# asp.net xml json asp.net-web-api

这是我的api行动:

[HttpGet]
public IHttpActionResult Get()
{
    HttpContext.Current.Response.ContentType = "text/xml";
    string foo = GetXmlString();
    return Ok(foo);
}

我希望响应可以在相关请求发生时返回“text/xml”类型。如果我什么都不做(使用默认配置),返回类型将为“application/xml”,如果我进行了以下配置:

var applicationXml = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(_ => _.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(applicationXml);
var textXml = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(_ => _.MediaType == "text/xml");
if (textXml == null)
{
    config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
}

它会改为使用“application/json”。但我不想删除“application/json”,这是默认的媒体类型。

为什么动作级别配置无法按预期应用,但使用全局配置?我对这种行为很困惑。

3 个答案:

答案 0 :(得分:0)

您可以使用配置文件

来实现

WebApiConfig

中添加此内容
config.Formatters.Clear();
config.Formatters.Add(new XmlMediaTypeFormatter());
// config.Formatters.Add(new JsonMediaTypeFormatter());
// config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter());

答案 1 :(得分:0)

如果您希望此特定请求返回特定的“内容类型”,您可以使用Request.CreateResponse并传入您想要的格式化程序:

return Request.CreateResponse(HttpStatusCode.Accepted, new StringContent(""),
                              new XmlMediaTypeFormatter());

您可能还想查看有关WebAPI内容协商的this post

答案 2 :(得分:0)

你可以试试这些:

<强> 01

return Request.CreateResponse(HttpStatusCode.Accepted, new StringContent(""),
                              new XmlMediaTypeFormatter());

<强> 02

return Request.CreateResponse(HttpStatusCode.Accepted, new StringContent(""),
                              new MediaTypeHeaderValue("text/xml"));

<强> 03

return Request.CreateResponse(HttpStatusCode.Accepted, new StringContent(""),
                              Configuration.Formatters.XmlFormatter);