.net MVCでWebApi作ってたんですが、なんだか戻りがXMLになってしまう。Jsonで返したい。
とりあえず、Chromeで取るとデフォでXMLになるっぽい?デフォでJsonにしたい。
stackoverflowに同じ質問あった。さすが。。。
回答は色々あるけど、何となく今は↓が一番良さげ?デフォを変えるなら。
using System.Net.Http.Formatting;//RequestHeaderMapping用 public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); //デフォルトのフォーマットを変える↓ GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json")); } }
WebApiConfigのRegisterの中で↑を追記。
あと、ちょっと違うけど、URLの指定で最後に「~~.json」とか「~~.xml」って指定させて、フォーマットを変える方法。RedmineのAPIはこれ形式すな。
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API ルート config.MapHttpAttributeRoutes(); config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json"); config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "application/xml"); //ルートの設定で{ext}が必要 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}.{ext}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
ただ、最初のデフォルト強制する奴つけてると効かなくナリ。
あと、↓の感じでURLは最後の「/」付けないと効かなかったりする。ちょっとハマッた。Routeの設定ちゃんとやればいけるっぽいの。
/api/controller/action.json/
ついでに、Routeの設定ってみんなどうしてるんでしょ。デフォのままだと、Controllerのみだから、GetとかPostしか作れないよね?
Controller増やせばいいんだけど、ファイルいっぱいできるからあまし好きじゃない。なので、action入れてやってたりするんですが、これってありなのかしら。イマイチ分かってない。