在ASP MVC Web API中,manualy MediaTypeFormatter管理的最佳实践是什么?

时间:2015-11-17 11:34:14

标签: c# asp.net-mvc asp.net-web-api mediatypeformatter

我有ASP MVC Web API服务,我的方法应该返回特定格式的数据(JSON,XML等)。响应格式取决于方法,并不依赖于客户首选项。
我使用HttpResponseMessageObjectContent,我应该为ObjectContent设置MediaTypeFormatter。
我可以这样做:

new ObjectContent<MyDataContract>(data, new JsonMediaTypeFormatter())

或者这样:

new ObjectContent<MyDataContract>(data, Configuration.Formatters.FirstOrDefault(f => f.GetType() == typeof(JsonMediaTypeFormatter)))

他们都不是很好看。
第一个为每个请求创建新对象 第二个使用搜索蚂蚁这看起来不合适。
任何人都可以为我的问题找到更好的解决方案吗?

2 个答案:

答案 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"));

    }