問題タブ [asp.net-apicontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - .NET MVC4 を使用して REST APIController のモデルから特定のフィールドのサブセットのみを返す方法
クライアントが XML 形式でデータを返すように要求できる Web API を作成しています。Enterprise Foundation と MVC4 を使用して、これを .NET に実装しています。
コントローラーのモデルから一部のフィールドのサブセットのみを返す方法に少し苦労しています。
議論のために、属性「Id」、「Name」、「Price」、および「Actual Cost」を含む Product モデルがあるとします ( http://www.asp.net/web-apiの例を使用しています)。 /overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-framework,-part-6 )
クライアントが特定の製品をクエリしてその名前と価格を取得するための Web API を公開する必要がありますが、この応答では "実際のコスト" プロパティを返したくありません (これは私たちの秘密であるため)。
今私が提供するリンクでは、これはまさに彼らが DTO を使用して解決しようとしている問題です (彼らは、私が返したいサブセットのみを含む ProductDTO と呼ばれる DTO を定義しています)。このソリューションを実装したところ、DTO で指定したフィールドのみを返すことができるようになりました。
問題は、XML で返されるエンティティに使用される命名が、Product ではなく ProductDTO になっていることです。つまり、返される XML は
それよりも
これは、現在 API を使用しており、「製品」が返されることを期待しているすべてのクライアントが「ProductDTO」を返すことを意味します。これは、コードを変更する必要があり、受け入れられないことを意味します。現在取得している関連するサブフィールドのセットのみを含む「製品」を提供する必要があります。どうすればこれを達成できますか? プロパティが Web API でシリアル化されるのを防ぐで提案されているように、データ メンバーを単純に「無視」することはできません。
背景: Ruby on Rails で記述された既存の API サーバー インターフェイスがあり、現在これを C# および .NET MVC4 に移行しています。また、既存の古い Ruby on Rails API サーバーに既にインターフェイスしている多数のクライアント アプリケーションがあり、クライアントがコードを変更することを望んでいません。API サーバー コードを Ruby on Rails から C# に移行しているだけです。Ruby on Rails では、特定の呼び出しで属性のサブセットのみを返す必要がある場合に、XML シリアライザーにフィルターを適用するだけで済みました。
c# - Asp.netシングルページアプリケーション:投稿データを調べる方法は? Request オブジェクトのどのプロパティですか?
Ajax リクエストで送信された投稿データを調べるにはどうすればよいですか? Request オブジェクトにありますか? はいの場合、どのプロパティですか?ありがとう!
c# - JSON で POST を ApiController に送信する
編集:答えが見つかりました(コメントで)。
現在、System.Web.Http.ApiController
サーバーのメモリ内のオブジェクトにアクセスするために使用しています。これらのオブジェクトは、任意のタイプを持つことができます。
次のAPIコントローラーを使用してそれらを受け取ります:(サンプルコード。完全なソースコードではありません)
これは、Web API を介して JSON ですべてのオブジェクトを受け取るのに問題なく機能します。問題は、POST を使用して新しいオブジェクトを送信することです。
Object は、実際の逆シリアル化されたオブジェクトではなく、動的オブジェクトになります。次のような具体的なメソッドを実装します。
正常に動作します。悲しいことに、私は実行時に使用されるすべての型を知っているわけではありませんが、dataPath を分析することでそれがどの型であるかを知っており、実行時に Type インスタンスを取得できます。正しい Type を使用して正しいインスタンスを作成するように、フォーマッタまたは ApiController (実際にインスタンスを作成したのは誰なのかわかりません) に指示するにはどうすればよいですか?
を使用してSystem.Net.Http.Formatting.JsonMediaTypeFormatter
います。
前もって感謝します。
デブラズ
api - Web API コントローラ メソッド -- リクエストが null
以下に示すメソッドを呼び出す場合、Request は常に null です。基本クラスとして ApiController を使用するコントローラーを持つ MVC4 アプリのコントローラーから JSON データを返す簡単なメソッドがいくつかあります。ディレクトリ関数のコードは次のとおりです。
このメソッドが呼び出されると、「dir」が r.GetDirectory() から適切に読み込まれます。しかし、リクエストは null です。したがって、当然 Request.CreateResponse() は失敗します。Request が null になる理由、または戻り値が HttpResponseMessage のままになるように書き換える理由を探しています。
これは(私の単体テストプロジェクトで)呼び出されています:
ご協力いただきありがとうございます。
c# - API コントローラーが無効な JSON を渡され、null を受け取る
ASP.NET のApiController
クラスを使用して Web API を作成しています。呼び出し元が 500 を取得する代わりに、無効な JSON を渡すと、入力パラメーターが null になることがわかりました。のように、私が合格した場合
これは明らかに有効ではありませんが、このメソッドに対して:
わかりp_input
ましたnull
。有効な JSON を POST しなかったことをユーザーに知らせる何かを送り返したいと思います。
私WebApiConfig.cs
の には、次のものがあります。
何か案は?この例は見ましたが、ApiController ではなく ASP.NET MVC だと思います。