問題タブ [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.
c# - WebApi post メソッドでのパラメータ バインディング
次のメソッドでデータを locationModel パラメータにバインドできません。私は他の投稿を見ましたが、解決策が機能していないようです:
次の方法で、フィドラーを介してメソッドを呼び出しています。
このメソッドはポスト リクエストの実行時に呼び出されますが、LocationModel は null です。LocationModel の定義は次のとおりです。
私は何を間違っていますか?
asp.net-apicontroller - WebApi POST 本文が FromBody とバインドされていない
ApiController のメソッドを次のように定義しました。
メソッドが呼び出されていますが、json は常に null です。私が渡しているものが私が期待しているものであることをFiddler経由で確認できます(ホスト名は明らかに編集されています)。ここで何が欠けていますか?
POST http://somehost.com/api/somemethod HTTP/1.1
ユーザー エージェント: フィドラー
ホスト: somehost.com
コンテンツの長さ: 54
コンテンツの種類: アプリケーション/json{"サイト":"ホーム","地域":"地域","フラグ":"フラグ"}
post - WebApi POST メソッドで [From Body] を使用すると、NULL パラメータが取得されます
WebApi で [FromBody] を使用しています。また、リクエストを POST メソッドに送信すると、リクエストにボディ パラメータが渡されません。フィドラーと WebRequest の両方を使用してみました。[FromBody] タグを削除すると機能し、Request オブジェクトを使用して読み取りました。それに対する説明はありますか?
c# - FromBody 経由で DataTable を Web API POST メソッドに渡す方法 (C#)
ストアド プロシージャのいくつかのパラメーターを渡す Winforms クライアントから Web API アプリで POST メソッドを正常に呼び出しています。
ただし、可能であれば、ストアド プロシージャ (最初にクライアントで実行する必要があります) の結果を FromBody 機能を介して POST メソッドに渡したいと思います。
ネットワーク経由で送信するのは大量のデータですが、現在私が行っている方法では、SP を 2 回実行する必要があります。最初はクライアントの Winforms アプリで、次に Web API サーバー アプリで、この SP の同時呼び出しです。時々問題を起こすようです。
したがって、可能であれば、「FromBody」を介してDataTableを送信するか、できればデータのXML化またはjson化されたバージョンを送信したいと思います(そして、反対側で解凍し、取得のためにhtmlに変換します)対応する GET メソッドが呼び出されたとき。
これを表示できるコードを持っている人はいますか?
パラメータを渡すだけの既存のコードは、ここで見ることができます。
アップデート
さて、Amit Kumar Ghosh の回答に基づいて、コードを次のように変更しました。
WebApiConfig.cs
コントローラ
クライアント
...しかし、コントローラーにはまだ到達していません。具体的には、「DataTable dt = dtPassedAsJson;」のブレークポイントです。到達することはありません。
実際、文字列が渡されているのに、そこで宣言されているデータ型が「DataTable」であるため、クラッシュしないことにちょっと驚いています。
更新 2
クライアントから渡すのは実際には文字列化/json化されたDataTableではなく、文字列化/json化された汎用リストであることに気付いた後、これも試しました。
Web API コントローラー
WebApiConfig.cs
これを Register メソッドに追加しました。
...そしてこの新しいクラス:
それでも、コントローラーのメインのブレークポイント行は次のとおりです。
...達していません。
c# - 適度に大量のデータを Web API アプリに渡すにはどうすればよいですか?
このコードを Web API コントローラーに入れました。
次のように、"[FromBody]" arg を介してクライアント (Winforms アプリ) からほんの少しの (不自然な) データを渡す場合に問題なく動作します。
ただし、 dataAsJson への割り当てに関するコメントを逆にして、実際のデータを送信すると、次のようになります。
...失敗します。エラー メッセージはありません。DataTable (_dtUsage) は、JsonConvert.SerializeObject() メソッドで問題なく json にシリアル化されます。「大量」のデータ (数千レコード) があるだけです。クライアントの PostAsync() への呼び出しに到達しないため、サーバーの Post メソッドに到達することはありません。
些細な量以上のデータを送信するときにこれを成功させる回避策はありますか? それほど多くのデータをネットワーク経由で渡すのはあまり好きではありませんが (現在、クライアントとサーバーは両方ともローカルで実行されていますが、デプロイ後の状況を考えてください)、もう 1 つのオプションは、両方のクライアントから同じストアド プロシージャを実行することです (そこに Excel スプレッドシート ファイルを生成する) およびサーバーから (データを HTML に変換する)。それは「Catch-22」状況の 1 つであると思われます (「そうする場合は差し押さえられ、そうでない場合は隔離されます」)。
アップデート
user3093073 のアイデアをテストして、これを Web.config の system.webServer セクションに追加しました。
(ここで見つけたものに基づいていますが、まだ機能していません...
更新 2
ユーザーuser3093073の答えに近づくと、これも試しました:
…もったいない。
更新 3
上記のコードを、サイト内のすべての Web.config ファイルに入れていることに注意してください。
...または、それらの場所を表示する別の方法:
更新 4
ここから数日間離れて戻ってきた後、私が渡そうとしていた「実際の」データは、機能した偽/テストデータとは異なる動物であることは明らかです。
テスト データは、単純な KeyValuePair のコレクションでした。ただし、実際のデータはもっと複雑です。その複雑なデータを単純な KeyValuePair に変換しようとすると、必ず問題が発生します。したがって、これの代わりに:
...次のようなものが必要です:
...しかし、それも機能していません。「 'System.Collections.Generic.List' には 2 つの引数を取るコンストラクターが含まれていません'」などのコンパイル エラーがいくつか発生します。
最初の引数を削除すると、次のようになります。
...「引数 1: 'string' から 'int' に変換できません」などの他のコンパイル エラーが発生する
java - 本文の Http PUT: 不正な要求エラー、API トークンを解析できません
リクエストの解析と送信で大きな問題が発生しました。リクエストの本文で、認証中に既に正常に取得したトークンを送信する必要があります。ドキュメントは次のとおりです。
PUT /api/ver1/orders {"token" : 文字列、"order" : オブジェクト}
そして、JSONObjectを解析して取得する方法は次のとおりです。
そして、ここにHttpputリクエストがあります
別のバリアントは、com.loopj.android.http.AsyncHttpClient を使用しているときです。私は別の取得、パッチ、投稿のリクエストを行っておらず、 PUTを除いてすべてが正常に機能していました。これが私が持っているコードです:
ここにentuty/jsonObject文字列があります:
{"token":"b695911b-2973-11e6-acac-06b720391567","order":{"order_type":"1","payment_type":"2","name":"Какой-то груз"," cost":"350","description":"","from":{"latitude":"55.15919993700593","longitude":"65.15919993700593"},"fromPeriod":{"date":"1464944049"," from":"15","to":"18"},"to":{"city":"Челябинск","address":"Ленина, 3, 3"},"toPeriod":{"date" :"1464944075","from":"15","to":"18:30"},"送信者":{"name":"Попов","comment":"Попов","phone":["+70000009111"]},"受取人":{"name":"Иванов Иван Иваныч","comment":"Иванов Иван Иваныч","phone":["70000009112"]},"cargo" :[{"名前":"wwww","説明":"wwww","サイズ":{"高さ":"2","幅":"3","長さ":"4"}," loaders_count":"1","does_need_packaging":false}]}}"width":"3","length":"4"},"loaders_count":"1","does_need_packaging":false}]}}"width":"3","length":"4"},"loaders_count":"1","does_need_packaging":false}]}}
私は Rest と httprequest の専門家ではないので、何が問題なのかわからず、まだ最初の put メソッドで例外があります:
{"name":"Bad Request","message":"No API token found","code":0,"status":400,"type":"yii\web\HttpException"}
アイデアがある人は助けてください!