.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入れてやってたりするんですが、これってありなのかしら。イマイチ分かってない。