第一种
直接在方法中返回json。
public class DefaultController : ApiController { [HttpGet] public IHttpActionResult Now() { return Json(new { n = new Random().Next(10, 100), t = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }); } }
不过一些内部返回的默认是xml格式,比如访问一个不存在的地址/api/xxx
<Error> <Message> 找不到与请求 URI“http://localhost:5566/api/xxx”匹配的 HTTP 资源。 </Message> <MessageDetail>未找到与名为“xxx”的控制器匹配的类型。</MessageDetail> </Error>
第二种
移除xml格式的支持(因为默认xml比json的优先,移除xml后默认就是json了)
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 //移除xml格式的支持 config.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
第三种
自定义内容响应格式IContentNegotiator
,需要引用System.Net.Http.Formatting
程序集。
public class SimpleContentNegotiator : IContentNegotiator { private readonly MediaTypeFormatter _formatter; private readonly string _mediaType; public SimpleContentNegotiator(MediaTypeFormatter formatter, string mediaType) { _formatter = formatter; _mediaType = mediaType; } public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) { var result = new ContentNegotiationResult(_formatter, new MediaTypeHeaderValue(_mediaType)); return result; } }
// Web API 配置和服务 //自定义内容响应格式 config.Services.Replace(typeof(IContentNegotiator), new SimpleContentNegotiator(new JsonMediaTypeFormatter(), "application/json"));