我有ASP MVC Web API服务,我的方法应该返回特定格式的数据(JSON,XML等)。响应格式取决于方法,并不依赖于客户首选项。
我使用HttpResponseMessage
和ObjectContent
,我应该为ObjectContent
设置MediaTypeFormatter。
我可以这样做:
new ObjectContent<MyDataContract>(data, new JsonMediaTypeFormatter())
或者这样:
new ObjectContent<MyDataContract>(data, Configuration.Formatters.FirstOrDefault(f => f.GetType() == typeof(JsonMediaTypeFormatter)))
他们都不是很好看。
第一个为每个请求创建新对象
第二个使用搜索蚂蚁这看起来不合适。
任何人都可以为我的问题找到更好的解决方案吗?
答案 0 :(得分:0)
为什么不使用IHttpActionResult并返回Ok()?你明确需要HttpResponseMessage吗?您是否也希望始终返回JSON,具体取决于客户期望的内容类型?
如果您想在WebApiConfig文件中始终返回JSON并使用IHttpActionResult,则可以添加以下内容:
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
这样API将始终返回JSON,并且在您的控制器中,您只能返回OK:
return this.Ok(data); // will be enough, no need to specify the content type
否则,如果你坚持使用HttpResponseMessage,你可以继承ObjectContent类并使用它(代码是动态编写的,可能需要一些tweeks)
public class JsonObjectContent<T> : ObjectContent<T>
{
public JsonObjectContent(T data) : base(data, new JsonMediaTypeFormatter())
{
}
}
在你的控制器中你会说
new JsonObjectContent<MyDataContract>(data)
答案 1 :(得分:0)
您可以在webApiConfig文件中进行设置。
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
还可以将MediaType设置为返回数据时的响应-
[HttpGet]
public HttpResponseMessage GetJson()
{
var result = new List<string>();
for (int i = 0; i < 50; i++)
result.Add("Hello World");
return Request.CreateResponse(HttpStatusCode.OK, result, new
MediaTypeHeaderValue("application/json"));
}