最近打算用WebAPI做服務端接口,返回JSON供ANDROID程序調用,結果試了好幾次JSONObject都無法解析返回的JSON字符串。看了一下服務端代碼:
public string Get()
{
return "{\"errNum\":300202,\"errMsg\":\"Missing apikey\"}";
}
打開CHROME瀏覽器,F12查看了一下返回信息,發現返回頭Content-Type是"application/xml; charset=utf-8"類型,原來WebAPI默認是返回XML類型, 有人說可以在Global.asax添加配置,代碼如下:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// 使api返回為json
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
按照上面方法做了之后,再F12的確是返回“application/json”了,本以為到此就結束了,萬萬沒想到的是JSONObject再次解析異常。之后又嘗試了好幾種方法,最后通過下面的方法終於返回了可以解析的JSON字符。
public HttpResponseMessage Get()
{
string json = "{\"errNum\":300202,\"errMsg\":\"Missing apikey\"}";
return new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") };
}
總結:其實WebAPI默認建議使用RESTful風格,根據GET\POST\PUT\DELETE調用不同的ACTION,並返回HttpResponseMessage,我們可以很靈活地定義HttpResponseMessage。
