問題タブ [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.
.net - REST API: 本文付きの GET リクエスト
REST API を実装したいのですが、GET 要求に本文が必要です。(ここで説明したように: HTTP GET with request body )
GET リクエストでボディを送信できない HTTP クライアントはありますか? メッセージ ボックスは赤ですが、Fiddler はそれを実行できます。
c# - FromUriとFromBodyを同時に読む
WebAPIに新しいメソッドがあります
リクエストクラスは次のようなものです
PostBodyを使用してlocalhost/Pusher / PushMessage?x = foo&y=barにクエリを実行しています。
私は何かが足りないのですか?
c# - FromBody 値が null になる
これは Asp.Net Webform アプリケーションです
これは私の Apicontroller の POST メソッドです
私はフィドラーのポストプロセスを使用しています。
そんな実験をしました。
しかし、そうではありませんでした。
何が問題ですか。
手伝ってくれますか?
私はそれを試みました、私は失敗しました。
フィドラーで:
class - Apex クラスを動的に作成する
このパラメーターとリンクを渡すことで Apex トリガーを作成しました。
今度は同じ方法で Apex Trigger を作成したいと思います...どのパラメータを渡す必要があるのか、Body セクションに何を記述すればよいのか。このドキュメントも参照しています: http://www.salesforce.com/us/developer/docs/api/index.htm
jquery - Web API と FromBody の操作
次のようなpostメソッドを持つAPIがあります。
そして、私はこれを行うことでそれを呼び出します:
これを行うと、400 Bad Request応答が返されます。API メソッドにブレークポイントを設定すると、 Nameが nullであることがわかります。これが私のコレクションモデルです:
今、私はこの記事を見てきました:
jquery を使用して frombody パラメータを Web API に投稿する
そして、空のキーでパラメーターを送信する必要があることを教えてくれますが、Collectionでは実際にそれを行うことはできません。
これを回避する方法を知っている人はいますか?それともより良いアプローチですか?
どんな助けでも大歓迎です。
/r3plica
encoding - 「ルビコンを渡った」後にHttpWebRequest本体の値がnullになるのはなぜですか?
XML ファイルのコンテンツをハンドヘルド デバイス (Compact Framework/Windows CE) からサーバー アプリの Web API メソッドに次のように送信しようとしています (クライアント コード):
コメントアウトされたコード (「<= は正常に動作します」) でわかるように、テストしたところ、必要なデータが StringBuilder に追加されています。スローされる例外はありません (「SendXMLFile 例外」は表示されません)。
ただし、対応するサーバー コードが呼び出されると、次のようになります。
...「serialNum」および「siteNum」引数は期待どおり (有効な期待値を含む) ですが、本体 (文字列化された XML) は null です。なんで?
アップデート
これもクライアントに追加しました:
...そして、「112」と表示されているように、バイト配列にはデータがあります(XMLファイルは非常に小さいです)。
更新 2
ここで、さらに別のデバッグ メッセージを追加しました。
...そして、「requestStream length is」というメッセージすら表示されません。代わりに、「SendXMLFileException NotSupportedException」が表示されます...???
更新 3
これは、ホーソン効果または類似の例だと思います。debug (MessageBox.Show()) ステートメントをコメントアウトしたら、サーバー アプリに戻す作業に戻りますが、[FromBody] val は null です。
次に、クライアントに「トランスポート接続からデータを読み取れません」というメッセージが表示されます
更新 4
stringifiedXML はここではまだ null です:
...この質問への回答に続いて、クライアントのコードを次のように変更した後でも:
注:これがサーバーをシャットダウンしたことによる単なる誤解を招く副作用かどうかはわかりませんが、その後、クライアント/ハンドヘルド アプリで次のエラー メッセージが表示されました。
"System.Net.ProtocolVi..." "この操作は、要求が送信された後に実行できません。"
更新 5
スタック トレースが必要な場合は、&c:
serNum と siteNum は、次のように uri に連結される単純な値です。
次のようにスタック トレースを取得しようとしました。
...しかし、今は「この操作は、リクエストが送信された後は実行できません」と表示されるだけです。
更新 6
メソッドのシグネチャを次のように変更しました。
...そしてこれに対応するコード:
...しかし、違いはありませんでした(「StackTrave =」メッセージが表示されないため、最初に失敗したに違いありません)
更新 7
2 つのデバッグ文字列を入れます。
0)
1) SendXMLFile() で:
...そして私はこれを見ます:
...しかし、2番目のサーバーが悲惨な詳細を表示する機会を得る前に、サーバーはnullボディ値を受け取り、クラッシュし、クライアントは同じ古い「この操作は後で実行できません」と泣き言を言いますリクエストが送信されました」という苦情。
更新 8
「 CreateRequest 呼び出しの後に KeepAlive と ProtocolVersion の設定を削除すると、例外がなくなるのではないかと思います。」という提案に応えて、コードを次のように変更しました。
...これに:
...それでも、同じエラーメッセージ (「この操作は、リクエストが送信された後は実行できません」) が表示され、stringifiedXML はサーバーにヒットしたときにまだ null です。
更新 9
Fiddler 2 を介して、私が理解しているものを送信すると、次のようになります (画像を右クリックし、視覚的なスーパーパワーがない場合は、新しいタブで開きます)。
...しかし、私が何を見ているのかわかりません...うまくいきましたか? 失敗しましたか?「body == 0」列は一時停止/失敗したと思わせますが、「204」は「サーバーはリクエストを正常に処理しましたが、コンテンツを返していません」という意味のようです...
更新 10
これは、uri を修正した後の Fiddler の叫び声です。サーバー アプリのブレークポイントに到達し、適切なデータが送信されます。
更新 11
このコードを変更すると:
...これに:
...これを stringifiedXML で取得しています: "
...そして、次のようになりました。
どう見ても改善ですね…
更新 12
Fiddle で "Request Body" として渡された文字列の正確な構成/フォーマットに応じて、結果は根本的に異なります。
これをリクエスト本文として:
...文字列化されたXMLはnullです
これをリクエスト本文として:
...stringifiedXML はまったく同じです ("")
...しかし、例外があります:
System.Xml.XmlException はユーザー コードによって処理されませんでした HResult=-2146232000 Message='1.0' は予期しないトークンです。予想されるトークンは '"' または ''' です。1 行目、15 番目の位置。Source=System.Xml LineNumber=1 LinePosition=15 SourceUri="" System.Xml.XmlTextReaderImpl.ThrowUnexpectedToken(String expectedToken1, String expectedToken2) の Xml.XmlTextReaderImpl.Throw(String res, String[] args) ) System.Xml.Linq.XDocument.Load (XmlReader リーダー、LoadOptions オプション) で System.Xml.Linq.XDocument.Parse (文字列テキスト、LoadOptions オプション) で System.Xml.Linq.XDocument で。
これをリクエスト本文として:
...stringifiedXML は "
最後から 2 番目に、これをリクエスト ボディとして使用します。
...stringifiedXML はまったく同じものです ("")
...しかし、私はこの例外を受け取ります:
System.InvalidOperationException はユーザー コードによって処理されませんでした。HResult=-2146233079 メッセージ = シーケンスには要素が含まれていません ソース = System.Core .MoveNext() in c:\HandheldServer\HandheldServer\Controllers\DeliveryItemsController.cs:109 行目 InnerException:
そして最後に、これを渡すと、(偽物ではありますが) vals が角度変数内に含まれます。
...私はまだ「シーケンスに要素が含まれていません」と表示されます
この方法は、レイチェル・カニングよりもうるさいです! それは何を望んでいる - ビールの卵?!?
更新 13
このコードで:
...またはこれ:
. . .XDocument doc = XDocument.Load(await Request.Content.ReadAsStreamAsync());
...そして、これは着信 stringifiedXML として:
"一部の TaskSome の場所"
...例外が発生します: 「System.Xml.XmlException was unhandled by user code HResult=-2146232000 Message=Root element is missing.」
このコード (同じ stringifiedXML) を使用すると、次のようになります。
... 私は、「System.InvalidOperationException はユーザー コードによって処理されませんでした。HResult=-2146233079 メッセージ = シーケンスに要素が含まれていません。 HandheldServer.Controllers.DeliveryItemsController.d__2.MoveNext() in c:\HandheldServer\HandheldServer \Controllers\DeliveryItemsController.cs:line 109 InnerException: "
IOW、着信文字列の解析方法に応じて、「ルート要素が見つかりません」または「シーケンスに要素が含まれていません」というメッセージが表示されます
デュース・マカリスター・マクリーン・ヴァージニア・ウィーパーとは?!? 「<LocateAndLaunch
>」はルート要素ではありませんか?「何らかのタスク」と「何らかの場所」の要素ではないでしょうか。
c# - この XML を解析するにはどうすればよいですか (「ルート要素が見つかりません」または「シーケンスに要素が含まれていません」を取得せずに)。
これは、この質問から派生したものです。「ルビコンを渡った」後、HttpWebRequest 本体の値が null になるのはなぜですか? これは答えられました (1 つのハードルが飛び越えました) が、次のハードルが私をつまずかせます。
このコードで:
...またはこれ:
...そして、これは着信 stringifiedXML として:
...例外が発生します:「System.Xml.XmlException was unhandled by user code HResult=-2146232000 Message=Root element is missing.」
このコード (同じ stringifiedXML) を使用すると、次のようになります。
... 私は得る
System.InvalidOperationException はユーザー コードによって処理されませんでした。HResult=-2146233079 メッセージ = シーケンスには要素が含まれていません ソース = System.Core .MoveNext() in c:\HandheldServer\HandheldServer \Controllers\DeliveryItemsController.cs:109 行目 InnerException:
IOW、着信文字列の解析方法に応じて、「ルート要素が見つかりません」または「シーケンスに要素が含まれていません」のいずれかが表示されます
デュース・マカリスター・マクリーン・ヴァージニア・ウィーパーとは?!? <LocateAndLaunch>
ルート要素ではありませんか?Some Task
とSome Location
要素ではありませんか?
使用できないなどの理由で XML を手動で分解する必要がありますXDocument
か?
注: Fiddler から、本文データ (XML テキスト) を送信すると機能します (送信したものが期待どおりに届きます)。それでも、サーバー上の XML 解析コードは失敗します。
ただし、ハンドヘルド/Compact Framework クライアント コードから同じデータを送信しようとすると、「=」を介してデータだけが送信されます (<xml version="
サーバーに渡されるようなものです。クライアントでは、「この操作を実行できません」と表示されます)。リクエストが送信された後」
アップデート
したがって、Marcinの答えに基づいて、XDocument.Parse()に固執すれば大丈夫だと思われ、TToniの答えに基づいて、data/xml自体が悪い可能性があります。ファイルの内容は次のとおりです。
したがって、バージョン番号の周りに引用符があります-しかし、これらを何とかエスケープする必要がありますか-これがデータが切り捨てられている理由です-最初の引用符(「1.0」の前)を見ると、それが文字列の終了であると考えられるためです。 ?
更新 2
Marcin、受信した「xml」データ (文字列) は、XDocument コードに到達する前に切り捨てられます。
更新 3
TToni の提案を使用し、二重引用符を一重引用符に置き換えると、次のようになります。
...私は今、サーバーメソッドに文字列全体を取得しています:
...しかし、まだ「ルート要素がありません」というメッセージが表示されます:
System.Xml.XmlException はユーザー コードによって処理されませんでした。HResult=-2146232000 Message=Root 要素がありません。Source=System.Xml LineNumber=0 LinePosition=0 SourceUri="" StackTrace: System.Xml.XmlTextReaderImpl.Throw(Exception e) で System.Xml.XmlTextReaderImpl.ParseDocumentContent() で System.Xml.XmlTextReaderImpl.Read() でSystem.Xml.Linq.XDocument.Load(XmlReader リーダー、LoadOptions オプション)、System.Xml.Linq.XDocument.Load(ストリーム ストリーム、LoadOptions オプション)、HandheldServer の System.Xml.Linq.XDocument.Load(ストリーム ストリーム)。 Controllers.DeliveryItemsController.d__2.MoveNext() c:\HandheldServer\HandheldServer\Controllers\DeliveryItemsController.cs: 66 行目 InnerException:
私がまだ狂っていなかったら、これは私を狂わせるでしょう。そのままでは、どこに追いやられているのかよくわかりません。多くの雇用主は意欲のある人を探しています。たぶんこれが彼らの意味ですか?
更新 4
これを使用して:
...これの代わりに:
...「ルート要素が見つかりません」というエラー メッセージを解決しました。したがって、私はマルシンの答えを正しいとマークしました。
c# - HttpWebRequest オブジェクトを Web API メソッドに渡す際に明示的すぎますか?
Web API メソッドが呼び出されると、クライアントから HttpWebRequest が渡されることはわかっています (少なくともそうだと思います)。IOW、クライアントが次のようなものを送信して Web API メソッドを呼び出す場合:
...serialNum (42) と siteNum (99) の値を含む HttpWebRequest オブジェクトがメソッドに渡されます。
また、(現時点ではとにかく) 大量のデータを送信する必要がある場合 (serialNum と siteNum が例にあるように、URI の一部として渡すには多すぎる/多すぎる)、このデータを次のように埋め込むことができると考えています。クライアントの HttpWebRequest オブジェクトは次のようになります。
...そして、「[FromBody]」属性を使用して、他の(サーバー)エンドでデコードします。次のようになります。
私の仮定は正しいですか?IOW、次のようなテスト コードの場合:
...現在の Web API メソッドは次のようになります。
...代わりに次のように変更します。
?
わかりやすくするために、Web API メソッドへの引数として HttpWebRequest オブジェクトを使用することは、あまりにも露骨すぎると思います。送信される HttpWebRequest は「与えられた」ものであり、この場合に必要なのは「[FromBody] stringifiedXML」引数であり、[FromBody] データを私が与えた例のようなもので「アンパック」できることを願っています上記 (例: "XDocument doc = XDocument.Parse(stringifiedXML);")。
既存のコード (メソッドの引数として HttpWebRequest オブジェクトを明示的に渡す) または他のケース (HttpWebRequest オブジェクトがそこにあることが暗黙的にわかっていると仮定し、代わりに [FromBody] に埋め込まれたデータを処理する) のどちらかで正しいですか?それ)、またはどちらの場合も私は正しいですか?
最初の/現在のケース (HttpWebRequest オブジェクトを渡す必要がある) が正しい場合、HttpWebRequest オブジェクトに埋め込まれたデータを取得するにはどうすればよいですか? 「getResponseStream」を呼び出す必要がありますか、それとも...???
アップデート
HttpWebRequest の明示的な使用を控えることができれば、別の問題があります。これ:
...「[FromBody]」属性が認識されないため、インターフェイス メソッドとしてコンパイルされません。それを「文字列」に置き換えるだけで十分でしょうか?
更新 2
次のように、「HttpWebRequest httpwebreq」を「[FromBody] String stringifiedXML」に置き換えました。
...しかし、「型または名前空間名 'FromBody' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」というメッセージが表示されます。
「using System.Web.Http;」を追加したかどうかにかかわらず、これを取得します。か否か。
プロジェクト参照に DLL を追加する必要がある場合、それはどの DLL ですか?