web-dev-qa-db-ja.com

JSONの代わりにXMLを返すASP.NET Web API

デフォルトでは、Web APIはJSONデータを返しますが、何らかの理由でAPIを作成すると、JSONではなくXMLを返します。

public class CurrencyController : ApiController
{
    private CompanyDatabaseContext db = new CompanyDatabaseContext();

    // GET api/Currency
    public IEnumerable<Currency> GetCurrencies()
    {
        return db.Currencies.AsEnumerable();
    }
}

私は普通の何かを変更していないので困惑しています

25
clifford.duke

WebApiConfigを次のように変更すると、デフォルトでJSONが取得されます。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
    }
}
55
chamara

Web Apiは、返されるデータ型を選択するために、今後のリクエストのヘッダーを探します。たとえば、Accept:application/jsonを設定すると、戻り値の型がJSONに自動的に設定されます。

それに加えて、content-typeを設定すると、今後のリクエストデータタイプに関するWeb-APIの手がかりが得られます。したがって、JSONデータをWeb APIに投稿する場合は、ヘッダーにContent-Type:application/jsonが必要です。

16
kkocabiyik