C#
 Computer >> コンピューター >  >> プログラミング >> C#

Asp.Net webAPI C#のコンテンツネゴシエーションとは何ですか?


コンテンツネゴシエーションは、複数の表現が利用可能な場合に、特定の応答に最適な表現を選択するプロセスです。つまり、リクエストのAcceptヘッダー値に応じて、サーバーはレスポンスを送信します。 HTTPでのコンテンツネゴシエーションの主なメカニズムは、これらのリクエストヘッダーです-

受け入れる −「application / json」、「application / xml」などの応答に使用できるメディアタイプ、または「application / vnd.example+xml」などのカスタムメディアタイプ

Accept-Charset −UTF-8やISO8859-1など、どの文字セットを使用できますか。

Accept-エンコーディング −gzipなどのどのコンテンツエンコーディングが受け入れられるか。

同意する-言語 −「en-us」などの推奨される自然言語。

サーバーは、HTTPリクエストの他の部分も確認できます。たとえば、リクエストにAJAXリクエストを示すX-Requested-Withヘッダーが含まれている場合、Acceptヘッダーがない場合、サーバーはデフォルトでJSONになる可能性があります。

コンテンツネゴシエーションでは、パイプラインはHttpConfigurationオブジェクトからIContentNegotiatorサービスを取得します。また、HttpConfiguration.Formattersコレクションからメディアフォーマッターのリストを取得します。

次に、パイプラインはIContentNegotiator.Negotiateを呼び出し、-

を渡します。
  • シリアル化するオブジェクトのタイプ
  • メディアフォーマッターのコレクション
  • HTTPリクエスト

Negotiateメソッドは2つの情報を返します-

  • 使用するフォーマッター
  • 応答のメディアタイプ

フォーマッターが見つからない場合、Negotiateメソッドはnullを返し、クライアントはHTTPエラー406(受け入れられません)を受け取ります。

以下のようなStudentControllerについて考えてみましょう。

using DemoWebApplication.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class StudentController : ApiController{
      List<Student> students = new List<Student>{
         new Student{
            Id = 1,
            Name = "Mark"
         },
         new Student{
            Id = 2,
            Name = "John"
         }
      };
   }
}

RESTfulサービスの標準の1つは、クライアントが応答を希望する形式(XML、JSONなど)を決定できる必要があることです。サーバーに送信される要求には、Acceptヘッダーが含まれます。 Acceptヘッダーを使用して、クライアントは応答の形式を指定できます。例

Accept: application/xml returns XML
Accept: application/json returns JSON

以下の出力は、Acceptヘッダーをapplication/XMLとして渡したときの応答がXMLであることを示しています。

Asp.Net webAPI C#のコンテンツネゴシエーションとは何ですか?

以下の出力は、Acceptヘッダーをapplication/JSONとして渡したときのJSONの応答を示しています。

Asp.Net webAPI C#のコンテンツネゴシエーションとは何ですか?

応答が要求された形式でクライアントに送信されている場合、応答のContent-Typeヘッダーが適切な値に設定されていることに注意してください。たとえば、クライアントがapplication / xmlを要求した場合、サーバーはデータをXML形式で送信し、Content-Type =application/xmlも設定します。

Asp.Net webAPI C#のコンテンツネゴシエーションとは何ですか?

品質係数を指定することもできます。以下の例では、xmlのqualityfactorはjsonよりも高いため、サーバーはXMLフォーマッターを使用し、データをXML.application / xml; q =0.8、application / json; q =0.5

でフォーマットします。

Asp.Net webAPI C#のコンテンツネゴシエーションとは何ですか?


  1. C#ASP.NET WebAPIのさまざまな種類のフィルターは何ですか?

    フィルタは、WebApiFrameworkリク​​エスト処理のさまざまなレベルで追加のロジックを挿入するために使用されます。フィルタは、横断的関心事(ロギング、承認、およびキャッシング)の方法を提供します。フィルタは、宣言的またはプログラム的な方法でアクションメソッドまたはコントローラに適用できます。以下は、Web API C#のフィルターの種類です。 認証フィルター − 認証フィルターは、ユーザーの詳細を認証するのに役立ちます。認証フィルターでは、ユーザーの信頼性をチェックするためのロジックを記述します。 認証フィルター − 承認フィルターは、ユーザーアクセスのチェックを担当しま

  2. C#ASP.NET WebAPIでのコントローラーアクションのさまざまな戻り値の種類は何ですか?

    Web APIアクションメソッドは、次のリターンタイプを持つことができます。 ボイド プリミティブ型/複合型 HttpResponseMessage IHttpActionResult 無効 − すべてのアクションメソッドが何かを返す必要はありません。ボイドリターンタイプにすることができます。 例 using DemoWebApplication.Models using System.Web.Http; namespace DemoWebApplication.Controllers{    public class DemoCont