这是我的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
”,这是默认的媒体类型。
为什么动作级别配置无法按预期应用,但使用全局配置?我对这种行为很困惑。
答案 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);