問題タブ [frombodyattribute]
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 - 複数のコンテンツ タイプを同じアクションにルーティングしてバインドすることはできますか?
既定では、モデル バインディングは、HTTP 要求で次のソースからキーと値のペアの形式でデータを取得します。
- フォーム フィールド
- リクエストボディ ([ApiController] 属性を持つコントローラーの場合)
- ルートデータ
- クエリ文字列パラメーター
- アップロードされたファイル
を使用せずにボディ データからモデル バインディングを追加する方法があることを知りたいと思っていApiControllerAttribute
ます。
私がこの質問をする理由は、私たちが asp net 5 から net core 5 に移行し、どのコンテンツ タイプ リクエストが来るかに依存せずにモデル パラメータをバインドしたいからです: withcontent-type: x-www-form-urlencoded
または withcontent-type application/json charset=utf-8
私はこの問題について多くのことを読みましたが、この記事[FromBody]
で説明されているように、属性を使用してコンテンツタイプごとにメソッドを分離するという決定しか見つけられませんでした。
asp.net-core - HttpWebRequest を使用して呼び出すと、ASP.NET Core 2.1 API POST 本体が null になり、JSON として解析できないようです
特定のケースで .NET Core 2.1 API が JSON 本体を無視しているように見える奇妙なバグに直面しています。
- 他にも多くの質問にアドバイスしましたが (たとえば、これ自体が他のものを参照しています)、問題を解決できませんでした。
次の API メソッドのようなものがあります。
関連する構成は次のとおりです。
TestJsonConverter
なぜ物事が期待どおりに機能しないのかをテストするために作成した単純なコンバーターはどこにありますか。それは簡単です。
CanConvert
Postman を使用した api メソッドの呼び出しは機能します。つまり、JSON コンバーターの、CanRead
、を通過し、解析された jsonを含むReadJson
にルーティングされます。SendInvoice
body
ただし、 HttpWebRequestを使用して api メソッドを呼び出すと(問題がある場合は .NET Framework 4 から)のみが通過しCanConvert
、 nullにルーティングさSendInvoice
れます。body
リクエストの本文は、次のような単純な json です。
本文を直接読み取ると、両方のケースで期待値が得られます。
2 種類のリクエストに意味のある違いは見当たりません。左側は Postman のリクエスト、右側は HttpWebRequest です。
確かに、Content-Type
ヘッダーは に設定されていapplication/json
ます。また、FWIW、HttpWebRequest
本体は次のように設定されています。
そして、次のように呼び出します。
質問
body
で使用すると null になるのはなぜHttpWebRequest
ですか? このような場合、JSON コンバーターの読み取りメソッドがスキップされるのはなぜですか?