【发布时间】:2014-09-04 08:51:37
【问题描述】:
我有一个返回一些产品数据的 Web API 项目。
如果没有指定 Accept 标头,则默认返回 XML,就像在我的 WebApiConfig 中一样:
config.Formatters.Clear();
config.Formatters.Add(new XmlMediaTypeFormatter());
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter());
所以默认是 XML,第一个格式化程序,但是如果请求需要它,API 仍然支持 JSON。
在我的ControllerHelper 中,我添加了一个415 Format not supported回复:
catch (FormatException)
{
var resp = new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType)
{
Content = new StringContent(string.Format(HttpStatusCode.UnsupportedMediaType.ToString())),
};
throw new HttpResponseException(resp);
}
如果没有指定 Accept 标头,我想抛出该响应,因此需要将其设置为 application/xml、text/xml 或 application/json。
例如,如果我测试将 Advanced Rest Client 中的接受设置为 application/foo,我想抛出异常。
如何做到这一点?提前致谢!
【问题讨论】:
-
你看过 request.Headers 了吗?
-
我可能在寻找答案时偶然发现了它。您应该为控制器中的每个 ActionResult 指定它还是最好的方法是什么?谢谢。
-
在 web apis 中尝试过滤器。在那里您可以解析您的标头并获取内容类型并将异常/错误消息或水返回给客户端。过滤器适用于所有操作。没有太多经验,但看到它工作。
-
我也没有@theinsaneone,感觉就像我在这里如履薄冰!感谢您的回复。如果有任何进展或类似情况,我会更新。
-
你可以google一下web api中的动作过滤器。这将是解决您问题的正确方法
标签: c# xml asp.net-mvc asp.net-web-api