0

私はC#でRestfulサービスを開発しており、使用するとうまく機能します

[OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle =     
WebMessageBodyStyle.Wrapped, UriTemplate = "json/?id={id}")]
    string jdata(string id);

私の対応する関数の実装は次のとおりです。

public string json(string id)
{
 return "You Typed : "+id;
}

ここまではすべてうまくいきましたが、WenInvoke Method="POST" を変更すると、"Method NOT Allowed." に直面する必要があります。

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, BodyStyle = 
WebMessageBodyStyle.Wrapped, UriTemplate = "json/?id={id}")]
    string jdata(string id);
4

2 に答える 2

4

POST ではなく GET を介して Uri "json/?id={id}" に到達しているため、"Method not allowed" が表示されます。これをクライアントに確認してください (このリソースの呼び出し方法については言及していません)。クライアントで Web サービスをどのように使用しようとしているのか、さらに詳細を教えてください。.Net クライアントですか?

API をテストするには、Fiddler を使用することをお勧めします - HTTP リクエストを送信する前に GET または POST を使用するかどうかを明示的に指定できる場合: ここに画像の説明を入力

もう 1 つの問題は、無意識のうちに "json" を Uri として使用している可能性がありますが、ResponseFormat を WebMessageFormat.Xml として定義しています。クライアントにとっては少し混乱しませんか?JSON を返したかったのではないでしょうか? その場合、リクエストとレスポンスの両方で Json を使用することをお勧めします。

[WebInvoke(Method = "POST", UriTemplate = "/ValidateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
于 2014-12-04T10:40:13.787 に答える
0
 [OperationContract]
        [WebInvoke(Method="POST",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
             UriTemplate = "json")]
        string jdata(string id);

これは、契約がどのように見えるか、クライアントでどのように見えるかです

WebRequest httpWebRequest =
             WebRequest.Create(
               url);
            httpWebRequest.Method = "POST";
string json = "{\"id\":\"1234"\}"

 using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write(json);
            }
            httpWebRequest.Timeout = 1000000;

            WebResponse webrespon = (WebResponse)httpWebRequest.GetResponse();

            StreamReader stream = new StreamReader(webrespon.GetResponseStream());
            string result = stream.ReadToEnd();

             Console.Out.WriteLine(result);

上記は、サービスをテストするために使用するものです。それが役に立てば幸い。

于 2013-10-20T20:49:22.743 に答える