第一种
直接在方法中返回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
找不到与请求 URI“http://localhost:5566/api/xxx”匹配的 HTTP 资源。 未找到与名为“xxx”的控制器匹配的类型。
第二种
移除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, IEnumerableformatters) { var result = new ContentNegotiationResult(_formatter, new MediaTypeHeaderValue(_mediaType)); return result; }}
// Web API 配置和服务//自定义内容响应格式config.Services.Replace(typeof(IContentNegotiator), new SimpleContentNegotiator(new JsonMediaTypeFormatter(), "application/json"));