4

次の例を検討してください。

public class SomeBusinessLayerService : DataService<MyEntityContainer>
{
 [WebInvoke]
 void DoSomething(string someParam)
 {
 }
}

関数にパラメーターを渡す方法の例やヘルプが見つかりません! WebClient を使用する (またはフィドラーを使用する) 関数呼び出しをトリガーできますが、パラメーター someParam を何を試しても常に null です さらに悪いことに、型を int に変更すると、すべての試行が次のエラーで終了します:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="en-US">Bad Request - Error in query syntax.</message>
</error>

どのように呼び出すことができるかについて、POSTコンテンツの実際の例を教えてください。

注: これは DataService であり、WCF サービスではありません。問題なくWCFサービスと同じ方法で動作させることができます。

編集: また、URI にはサイズ制限と文字列をサニタイズする要件があるため、POST の例と URI にパラメーターを埋め込まない必要があります。

4

5 に答える 5

5

「Bad Request - Error in query syntax」という応答で何時間も頭を悩ませた後、URI にパラメーターを渡すことで、ようやく機能するようになりました。

文字列パラメーターを囲む引用符に特に注意してください。

間違い: DoSomething?someParam=param 正しい: DoSomething?someParam='param'

于 2009-05-10T07:46:15.083 に答える
1

引用符で URI に param を含めるようにしてください (DoSomething?someParam='param')。私はこれを試してみましたが、うまくいきました.それ以外の場合は、あなたと同じエラーを受け取っていました.

于 2009-01-13T16:06:03.850 に答える
0

その質問に対するMicrosoftチームからの回答を受け取ったことがないので、次の回避策を見つけました。

RequestID、Result、およびParamerter文字列を使用してFunctionRequestというテーブル
を作成します。リクエストを実行するには、オブジェクトを作成するだけです。
複雑なオブジェクトを送信する必要がある場合-DataContextシリアル化を使用してサーバーに送信します。
すべての呼び出しがデータベースにも記録されるようになりました。これはロギングに最適です。

于 2009-01-09T21:34:55.560 に答える
0

私は同様の問題を抱えていました.POSTを使用してx-www-form-urlencodedフォーマット(param1=value1&param2=value2...)でフォームパラメータを[WebInvoke]マークされたメソッドに送信していましたが、パラメータを取得する方法を理解するのに苦労しました. 私は最終的に次の方法でそれを達成しました:

[WebInvoke]
void DoSomething(Stream requestStream)
{
    StreamReader reader = new StreamReader(stream);
    var requestContent = reader.ReadToEnd();
    var parameters = HttpUtility.ParseQueryString(requestContent);
    var param1 = parameters["param1"];
    var param2 = parameters["param2"]; //and so on...
}
于 2010-08-20T14:46:10.973 に答える
0

少しのantscode 応答を完了するには、パラメーター値を引用符で囲むことに細心の注意を払う必要があるだけではありません...

しかし!また、Guid 値の前に「guid」を付ける必要があります。そのようです :

var y = ctx.Execute<bool>(new Uri("ReportExists?id=guid'" + Guid.NewGuid() + "'", UriKind.Relative));
于 2009-10-15T11:17:33.060 に答える