Chromeを使用してASP.NET Web APIでXMLではなくJSONを返すにはどうすればよいですか?


1220

新しい使い方ASP.NETのWeb APIをで、クローム私はXMLを見ています-どのように私は要求するためにそれを変更することができますJSONを私はブラウザで表示できるように?リクエストヘッダーの一部にすぎないと思いますが、それは正しいですか?


8
JSONをデフォルトの動作のみで返すようにするための議論があります:github.com/aspnet/Mvc/issues/1765
Natan

回答:


1738

App_Start / WebApiConfig.csMVC Web APIプロジェクトのクラスに次のコードを追加するだけです。

config.Formatters.JsonFormatter.SupportedMediaTypes
    .Add(new MediaTypeHeaderValue("text/html") );

これにより、ほとんどのクエリでJSONが確実に取得されますがXML、を送信すると取得できますtext/xml

応答が必要な場合は、以下のトッドの回答を確認しContent-Typeapplication/jsonください。

NameSpaceが使用していSystem.Net.Http.Headersます。


115
これは驚くほど見過ごされがちな回答であり、元の質問は完全に明確ではありませんでしたが、これにより、JSONがWebブラウザ(Accept:text / htmlを送信する)のデフォルトの応答になります。よくやった。
gregmac 2013年

16
+1遠く離れて最良の答え。ブラウザにJSONが表示されないためにXMLを完全に削除することを選択する大量のpplがいると思います。
Derek Hunziker 2013年

3
私がこれを行ったときに、HTMLブレークタグが含まれているサードパーティから提供されたデータが、改行で終わっていることがわかりました。その後、JSONは無効になりました。これがあなたに影響を与えるなら、受け入れられた答えを使う方が良いです。
Stonetip

23
応答のContent-Typeヘッダーは引き続きであることに注意してくださいtext/html
Mrchief 2014年

78
これは恐ろしいことです。応答コンテンツタイプヘッダーはapplication / jsonである必要があります。この「ソリューション」により、text / htmlになります。
meffect 2014

501

でこれを行うと、WebApiConfigデフォルトでJSONを取得しますがtext/xml、リクエストAcceptヘッダーとして渡すと、XMLを返すことができます。

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);
    }
}

MVCプロジェクトタイプを使用していないため、このクラスが最初からなかった場合は、この回答を組み込んで、その組み込み方法の詳細を確認してください


51
注意してください、元の動作は正しいです。application/xml優先度0.9および*/*優先度0.8のChromeリクエスト。削除するapplication/xmlと、クライアントが特に要求した場合にWeb APIがXMLを返す機能が削除されます。たとえば、「Accept:application / xml」を送信した場合でも、JSONを受信します。
ポルジュ2013年

11
私ですか、それとも最初の文が間違っていますか?コードは、デフォルトを変更するだけでなく、XMLを完全に削除するように見えます。
NickG 2013

6
@NickG:ここで見過ごされている解決策であり、IMHOがはるかに優れたオプション(application / xmlを維持)は、このページの下の方にあるFelipe Leusinによって提案された解決策です。config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue( "text / html"));の使用
コーエン

1
それで、Web設定を介してそれをどのように行うので、デフォルトでjsonを取得し、要求された場合はXMLを取得しますか
カイル

4
以下の@Felipse Leusinの回答は実際には短く、うまく機能します。
ケン・スミス

314

RequestHeaderMappingを使用するContent-Type = application/jsonと、応答ヘッダーにもが設定され、Firefox(JSONViewアドオンを使用)が応答をJSONとしてフォーマットできるようになるため、さらにうまく機能します。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept", 
                              "text/html",
                              StringComparison.InvariantCultureIgnoreCase,
                              true, 
                              "application/json"));

6
これは最も無駄のないシンプルなソリューションであり、Fiddlerはjosnとして返されるコンテンツタイプも検出します。
スティーブジョンソン

4
いいね!これをコードのどこに配置することをお勧めしますか?
Tim Abell、2015年

9
WebApiConfig.cs
Animesh

9
私のために働いた。System.Net.Http.Formattingを使用
bbsimonbb

1
自分の便宜のためのリンク:この回答は、私が通常実行する別のセットアップ手順であるstackoverflow.com/a/28337589/398630でうまく機能します。
BrainSlugs83

309

好き Felipe Leusinのアプローチが一番です。実際にXMLを必要とするクライアントからのコンテンツネゴシエーションを損なうことなく、ブラウザーがJSONを確実に取得できるようにしてください。私にとって唯一欠けていたのは、応答ヘッダーにまだcontent-type:text / htmlが含まれていることでした。なぜそれが問題でしたか?私が使用しているのは、コンテンツタイプを検査するJSON Formatter Chrome拡張機能を使用しているためです。text / htmlリクエストを受け入れ、application / jsonレスポンスを返す単純なカスタムフォーマッターを使用して、これを修正しました。

public class BrowserJsonFormatter : JsonMediaTypeFormatter
{
    public BrowserJsonFormatter() {
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        this.SerializerSettings.Formatting = Formatting.Indented;
    }

    public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) {
        base.SetDefaultContentHeaders(type, headers, mediaType);
        headers.ContentType = new MediaTypeHeaderValue("application/json");
    }
}

次のように登録します。

config.Formatters.Add(new BrowserJsonFormatter());

24
コンストラクタでthis.SerializerSettings.Formatting = Formatting.Indented;、ブラウザ拡張なしできれいに印刷したい場合は追加します。
Alastair Maw、2014年

10
なぜそれを回線上できれいに印刷したいのですか?
meffect

8
@ dmit77の回答は、この回答よりも優れています(より簡潔です)。
H.Wolper 2014

8
@eddiegrovesは、ネットワーク上できれいに印刷したくない。サーバーが送信するビット数を最小限に抑えたい(つまり、スペースを入れない)。次に、ブラウザでアドオンなどを使用して適切にフォーマットする必要があります。JavaScriptは通常、JSONを解析する必要があります。なぜ不必要なフォーマットを導入することで遅くなるのですか
meffect

13
追加することusing System.Net.Http.Formattingを忘れないでくださいusing Newtonsoft.Json
Berriel

186

MVC4クイックヒント#3-ASP.Net Web APIからのXMLフォーマッターの削除

Global.asax行を追加します。

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

そのようです:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BundleTable.Bundles.RegisterTemplateBundles();
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}

9
機能-XMLの代わりにJSONをデフォルトにする方がはるかに優れています。
ホイットニーランド2012

5
しかし、あなたはまだxmlを返すことができますか?
トーマス株

99
私はそれをテストしました、そしてあなたはできません。したがって、これはXMLサポートを削除することになります。警告、グーグルの人々
Thomas Stock

3
以下の私の答えを見てみると、必要に応じてxmlが返されますが、サイトはJSONでブラウザーに応答できます
Glenn Slaven

3
@GlennSlavenええ、あなたの答えは正しいものとしてマークされたものでなければなりません。
radu florescu 2012年

114

WebApiConfig.cs、の末尾に追加登録機能:

// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);

ソース


XmlFormatterはMVC4で新しいですか?
Glenn Slaven 2013

1
MVC5では、configをGlobalConfiguration.Configurationに置き換えることでこれを行うことができます
Steven

4
JSONのみをサポートする必要があり、どのような状況でもXMLの発行を許可できないプロジェクトの場合、これは断然最良のオプションです。
Luc C 14

1
config.Formatters.Add(config.Formatters.JsonFormatter);
Cas Bloem

3
それはひどい。-これは、たとえクライアントがContent-Typeヘッダーで特にXMLを要求したとしても、常にJSONを返します。
BrainSlugs83 2017

94

Global.asaxでは、以下のコードを使用しています。JSONを取得するための私のURIはhttp://www.digantakumar.com/api/values?json=true

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new  QueryStringMapping("json", "true", "application/json"));
}

2
偉大な者。あなたのメソッドはパラメータを期待していますか?以下のような?はlocalhost:61044 / API /値/ GETDATE JSON = trueの場合、日付= 2012年8月1日
LT.Nolo

デフォルトでどのような形式のデータWeb APIが返されるか。それはjsonまたはwebapiですか?ありがとう
トーマス

54

WebAPIのコンテンツネゴシエーションをご覧ください。これら(パート1パート2)は、驚くほど詳細で完全なブログ投稿で、その仕組みを説明しています。

要するに、あなたは正しいです、AcceptまたはContent-Type要求ヘッダーを設定する必要があるだけです。アクションが特定の形式を返すようにコーディングされていない場合は、を設定できますAccept: application/json


6
「ブラウザで表示できるように」
Spongman

1
@Spongman、はい、できます。ただし、RESTクライアントのような拡張機能を使用してください。ほとんどのブラウザーには、そのような拡張機能があります。ブラウザーでのURLの直接入力は1です。制限が多すぎます(ヘッダーを制御できない、データを投稿できないなど)。2.正しくない-ブラウザーは、意図されたとおりにWeb APIを消費しません。適切にテストすることはできません。そのため、繰り返しになりますが、優れたRESTクライアントアドオンはそれを修正します。
Ivaylo Slavov 14

45

質問はChrome固有なので、リクエストのコンテンツタイプを設定できるPostman拡張機能を入手できます。

郵便配達


Firefoxでは、about:configに移動し、accept.defaultを検索して、network.http.accept.default設定の内容をに変更しますtext/html,application/xhtml+xml,application/json;q=0.9,application/xml;q=0.8,*/*;q=0.7
Bjartur Thorlacius

あるいはtext/html,application/xhtml+xml;q=1.0,*/*;q=0.7、BitbucketなどのバグのあるホストがHTMLの代わりにブラウザーのJSONを誤って提供しないようにするためです。
Bjartur Thorlacius

URLは死んでいます。新しいものはchrome.google.com/webstore/detail/postman/…です。
Falcon Momot

35

簡単なオプションの1つは、MediaTypeMapping特殊化を使用することです。Application_StartイベントでQueryStringMappingを使用する例を次に示します。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("a", "b", "application/json"));

この場合、URLにクエリ文字列?a = bが含まれている場合は常に、ブラウザーにJson応答が表示されます。


2
これはとても役に立ちました。path.to/item.jsonを使用する場合は、QueryStringMappingの代わりにUriPathExtensionMappingを使用することもできます
nuzzolilo

32

このコードにより、jsonがデフォルトになり、XML形式も使用できるようになります。追加するだけxml=trueです。

GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("xml", "true", "application/xml"));
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

みんな、ありがとう!


1
これが最も柔軟な答えです(そして、最近は本当にデフォルトの構成になっているはずです)。この回答に追加するには、JSONがブラウザーからも含めてデフォルトです。XMLを表示するには、クエリ文字列を追加します:?xml = true
raider33

いくつかの戦略を試しました。XMLとJSONの両方の簡単なテストがあり、これは
そのまま使用できました

23

APIのテストにブラウザーを使用しないでください。

代わりに、CURLやFiddlerなどのリクエストを指定できるHTTPクライアントを使用してみてください。

この問題の問題は、APIではなくクライアントにあります。ブラウザの要求に従って、Web APIは正しく動作します。


30
ブラウザーを使用しないのはなぜですか?それは明白なツールです。
アンデルスリンデン2012

4
ここでのポイントは正しく重要です。問題の原因がクライアントにある場合は、アプリケーションの機能部分(MVC WebAPIインフラストラクチャ)を修正しないでください。Apiの実際の使用例は(正しいヘッダーを提供することにより)適切に使用され、これはアプリケーションの責任です。ただし、ブラウザーを完全に破棄することには同意しません。テストのために、ほとんどすべてのブラウザー(Rest Clientのような拡張機能)向けのツールがたくさんあります。
Ivaylo Slavov 2014

6
これはおそらくコメントになるはずです。
bon

17

上記の答えのほとんどは完全に理にかなっています。データがXML形式でフォーマットされていることがわかります。つまり、XMLフォーマッターが適用されているので、次のようにHttpConfigurationパラメーターからXMLFormatterを削除するだけでJSON形式を確認できます。

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

JSONがデフォルトのフォーマットなので


12

ヘッダーに「Chrome」が含まれているAccept: application/xml場合は、グローバルアクションフィルターを使用して削除しましたUser-Agent

internal class RemoveXmlForGoogleChromeFilter : IActionFilter
{
    public bool AllowMultiple
    {
        get { return false; }
    }

    public async Task<HttpResponseMessage> ExecuteActionFilterAsync(
        HttpActionContext actionContext,
        CancellationToken cancellationToken,
        Func<Task<HttpResponseMessage>> continuation)
    {
        var userAgent = actionContext.Request.Headers.UserAgent.ToString();
        if (userAgent.Contains("Chrome"))
        {
            var acceptHeaders = actionContext.Request.Headers.Accept;
            var header =
                acceptHeaders.SingleOrDefault(
                    x => x.MediaType.Contains("application/xml"));
            acceptHeaders.Remove(header);
        }

        return await continuation();
    }
}

動作するようです。



10

正しい形式を返すのは、メディアタイプフォーマッタによって行われます。他の人が述べたように、あなたはWebApiConfigクラスでこれを行うことができます:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ...

        // Configure Web API to return JSON
        config.Formatters.JsonFormatter
        .SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));

        ...
    }
}

詳細については、次を確認してください。

アクションがXMLを返す場合(これはデフォルトです)、JSONを返すために特定のメソッドのみが必要な場合、を使用ActionFilterAttributeしてその特定のアクションに適用できます。

フィルター属性:

public class JsonOutputAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        ObjectContent content = actionExecutedContext.Response.Content as ObjectContent;
        var value = content.Value;
        Type targetType = actionExecutedContext.Response.Content.GetType().GetGenericArguments()[0];

        var httpResponseMsg = new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.OK,
            RequestMessage = actionExecutedContext.Request,
            Content = new ObjectContent(targetType, value, new JsonMediaTypeFormatter(), (string)null)
        };

        actionExecutedContext.Response = httpResponseMsg;
        base.OnActionExecuted(actionExecutedContext);
    }
}

アクションへの適用:

[JsonOutput]
public IEnumerable<Person> GetPersons()
{
    return _repository.AllPersons(); // the returned output will be in JSON
}

Attributeアクションの装飾で単語を省略して、の[JsonOutput]代わりに使用できることに注意してください[JsonOutputAttribute]



6

ASP.net WebApi 2の最新バージョンに従って

下でWebApiConfig.cs、これは動作します

config.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
config.Formatters.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter);

6

なぜこの複雑さがすべて答えにあるのかは不明です。確かに、QueryString、ヘッダー、オプションを使用してこれを行う方法はたくさんありますが、私がベストプラクティスであると私が信じているのは簡単です。プレーンURL(例:)をリクエストするhttp://yourstartup.com/api/carsと、JSONが返されます。適切な応答ヘッダーを含むJSONを取得します。

Content-Type: application/json

このまったく同じ質問への回答を探す際に、私はこのスレッドを見つけました。この受け入れられた回答が正確に機能しないため、続行しなければなりませんでした。私は、あまりにも単純すぎて最高の答えにはならないと思う答えを見つけました。

デフォルトのWebAPIフォーマッターを設定する

ここにもヒントを追加します。

WebApiConfig.cs

namespace com.yourstartup
{
  using ...;
  using System.Net.Http.Formatting;
  ...
  config.Formatters.Clear(); //because there are defaults of XML..
  config.Formatters.Add(new JsonMediaTypeFormatter());
}

デフォルト(少なくとも私が目にしているもの)がどこから来るのかという疑問があります。それらは.NETのデフォルトですか、それとも他の場所(私のプロジェクトの他の誰か)によって作成されたのでしょうか。とにかく、これが役に立てば幸いです。


5

これはjayson.centenoと他の回答に似たソリューションですが、の組み込み拡張機能を使用していSystem.Net.Http.Formattingます。

public static void Register(HttpConfiguration config)
{
    // add support for the 'format' query param
    // cref: http://blogs.msdn.com/b/hongyes/archive/2012/09/02/support-format-in-asp-net-web-api.aspx
    config.Formatters.JsonFormatter.AddQueryStringMapping("$format", "json", "application/json");
    config.Formatters.XmlFormatter.AddQueryStringMapping("$format", "xml", "application/xml");

    // ... additional configuration
 }

このソリューションは、主にWebApiの初期リリースでODataの$ formatをサポートすることを目的としていますが、非OData実装にも適用され、 Content-Type: application/json; charset=utf-8れ、応答でヘッダー。

ブラウザーでテストするときに、URIの末尾&$format=jsonまたは&$format=xml末尾に追加できます。独自のヘッダーを設定できるブラウザ以外のクライアントを使用する場合、他の予想される動作を妨げることはありません。


5

以下のように使用できます:

GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

JSONメッセージを渡すだけのWebAPIアプリを作成する場合は、この回答を検討してください。
allen1

4

これらの2行のコードをWebApiConfigクラスに 追加するだけです

public static class WebApiConfig
{
     public static void Register(HttpConfiguration config)
     {
          //add this two line 
          config.Formatters.Clear();
          config.Formatters.Add(new JsonMediaTypeFormatter());


          ............................
      }
}

3

次のApp_Start/WebApiConfig.csように変更するだけです:

public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();
        //Below formatter is used for returning the Json result.
        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
        //Default route
        config.Routes.MapHttpRoute(
           name: "ApiControllerOnly",
           routeTemplate: "api/{controller}"
       );
    }

フォーマッタを削除することは、通常は良い考えではありません。機能を削除することになります。
naspinski 2016

実際、この場合、私にとってはうまくいきます。また、他の多くの人もこのような方法を提案しています。私はmyview.rahulnivi.net/building-spa-angular-mvc-5の 本からそれを学びました!
vaheeds

2

MSDN からASP.NETとAngularJSを使用した単一ページアプリケーションの構築(約41分)。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // ... possible routing etc.

        // Setup to return json and camelcase it!
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    }

それは最新のはずです、私はそれを試してみました、そしてそれは働きました。


2

この質問が出されて(回答されて)しばらく時間が経過しましたが、別のオプションは、以下のようにMessageHandlerを使用して要求処理中にサーバーのAcceptヘッダーをオーバーライドすることです。

public class ForceableContentTypeDelegationHandler : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(
                HttpRequestMessage request,
                CancellationToken cancellationToken)
    {
        var someOtherCondition = false;
        var accHeader = request.Headers.GetValues("Accept").FirstOrDefault();
        if (someOtherCondition && accHeader.Contains("application/xml"))
        {
            request.Headers.Remove("Accept");
            request.Headers.Add("Accept", "application/json");
        }
        return await base.SendAsync(request, cancellationToken);
    }
}

どこ someOtherConditionブラウザの種類など、でもません。これは、デフォルトのコンテンツネゴシエーションをオーバーライドしたい場合がある、条件付きの場合です。それ以外の場合は、他の回答と同様に、構成から不要なフォーマッタを削除するだけです。

もちろん、登録する必要があります。これはグローバルに行うことができます:

  public static void Register(HttpConfiguration config) {
      config.MessageHandlers.Add(new ForceableContentTypeDelegationHandler());
  }

またはルートごとに:

config.Routes.MapHttpRoute(
   name: "SpecialContentRoute",
   routeTemplate: "api/someUrlThatNeedsSpecialTreatment/{id}",
   defaults: new { controller = "SpecialTreatment" id = RouteParameter.Optional },
   constraints: null,
   handler: new ForceableContentTypeDelegationHandler()
);

また、これはメッセージハンドラーであるため、パイプラインの要求側と応答側の両方でのように実行されHttpModuleます。したがって、カスタムヘッダーを使用してオーバーライドを簡単に確認できます。

public class ForceableContentTypeDelegationHandler : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(
                HttpRequestMessage request,
                CancellationToken cancellationToken)
    {
        var wasForced = false;
        var someOtherCondition = false;
        var accHeader = request.Headers.GetValues("Accept").FirstOrDefault();
        if (someOtherCondition && accHeader.Contains("application/xml"))
        {
            request.Headers.Remove("Accept");
            request.Headers.Add("Accept", "application/json");
            wasForced = true;
        }

        var response =  await base.SendAsync(request, cancellationToken);
        if (wasForced){
          response.Headers.Add("X-ForcedContent", "We overrode your content prefs, sorry");
        }
        return response;
    }
}

2

これが私が自分のアプリケーションで使用した最も簡単な方法です。以下の3行のコードApp_Start\\WebApiConfig.csRegister関数に追加します

    var formatters = GlobalConfiguration.Configuration.Formatters;

    formatters.Remove(formatters.XmlFormatter);

    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

Asp.net Web APIは、返されたオブジェクトを自動的にJSONにシリアル化application/jsonし、ヘッダーに追加されると、ブラウザーまたはレシーバーがJSONの結果を返していることを認識します。


1

WebApiConfigは、jsonまたはxmlのどちらで出力するかを構成できる場所です。デフォルトではxmlです。register関数では、HttpConfiguration Formattersを使用して出力をフォーマットできます。System.Net.Http.Headers => MediaTypeHeaderValue( "text / html")は、json形式で出力を取得するために必要です。 ここに画像の説明を入力してください


1

Felipe Leusinの回答を何年も使用して、コアライブラリとJson.Netの最近の更新後、System.MissingMethodException:SupportedMediaTypes に遭遇しました。私の場合の解決策は、同じ予期しない例外が発生している他の人に役立つと思いますが、インストールすることSystem.Net.Httpです。NuGetは明らかにそれをいくつかの状況で削除します。手動インストールの後、問題は解決されました。


-3

一度インストールする必要があり、任意の API(自社またはサードパーティ)およびすべてに使用できる適切なツールを使用する代わりに、1つの API で単一のユースケース(GET)を変更するためにコーディングを必要とする非常に多くの返信に驚いていますユースケース。

だから良い答えは:

  1. あなたが唯一の要求JSONまたは他のコンテンツタイプにしたい場合は、インストールRequestly場合は、または同様のツールを、Acceptヘッダーを変更します。
  2. POSTも使用し、jsonやxmlなどが適切にフォーマットされている場合は、PostmanARCなどの適切なAPIテスト拡張機能を使用してください。

余分なツールやライブラリの形で肥大化を追加せずに物事を行うことを好む人もいます。
tno2007

誰かがジョブに対して間違ったツールを使用しているという理由だけでAPIに変更を加えることは依然として間違っています。Webブラウザーは、APIをテストするように設計されていません。APIの出力を表示するためではなく、ドキュメントを表示するために設計されています。API開発者にとって必須のツールキットの一部ではなく、APIテスターツールが肥大化していると誰かが思った場合はさらに悪いことです。正直なところ、APIを操作して実験する必要があるため、フロントエンド開発者も追加します。また、アドインのないブラウザでは、ヘッダーの設定、APIへの投稿、または応答ヘッダーの検査さえできないため、おそらくそれだけでは不十分です。
user3285954

私はあなたが言っていることを理解し、あなたは間違っていません。しかし、話題から外れているだけに、あなたが反対票を投じている理由は、質問に答える口調です。あなたは非常に戦闘的に聞こえ、彼らがすべてを知っていると考える開発者として出くわします、そしてそれは非常に不愉快です。あなたの回答から判断すると、あなたは素晴らしい開発者であると私は確信しています。しかし、特にこのようなプロのQA環境では、より親しみやすく、より人間的な方法で人々に対応し、説得するために、学ぶ必要があります。おそらく、最初に彼らが望む答えを与えてから、より良い方法を説明し、それがより良い理由を動機づけます。
tno2007
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.