0

ASP.Net 3.5プロジェクトでWebサービスを取得して、PUT要求を受け入れることができません。

AJAX呼び出しは次のとおりです。

var url = '/MyService.asmx/UpdateObject';
var options = {
    dataType: "json",
    contentType: "application/json",
    cache: false,
    type: "PUT",
    data: data ? ko.toJSON(data) : null
};

$.ajax(url, options);

MyService.asmxには、次のものがあります。

[WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet=true)]
public ButDto UpdateObject(ObjectDto myObject)
{
    //Do some stuff here

    return myObject;
}    

ただし、次のエラーメッセージが表示されます。

POSTリクエストを使用してメソッドUpdateObjectを呼び出そうとしましたが、これは許可されていません。

Webサービス宣言から「、UseHttpGet = true」を削除し、同じajax呼び出しを実行すると、次のエラーメッセージが表示されます。

GETリクエストを使用してメソッドUpdateObjectを呼び出そうとしましたが、これは許可されていません。

だから私はここで少し困惑しています。

更新

dataType: "text"も試してみましたが、結果は同じでした。

4

1 に答える 1

1

MSDNを見ると、ScriptMethodで受け入れられるHTTP動詞はPOSTとGETだけです。

エラーが発生する理由として。dataAJAXリクエストを送信するときにJSON配列をプロパティに入れると、jQueryはそれをクエリ文字列にシリアル化し、サーバーに送信します。しかし、それはASP.NETが探しているものではありません。使用するJSONの文字列をjQueryに渡す必要があります。好き:

var url = '/MyService.asmx/UpdateObject';
var options = {
    dataType: "json",
    contentType: "application/json; charset=utf-8",  // add charset for good measure
    cache: false,
    type: "POST",
    data: "{'id':2, 'name':'foobar'}"  // notice the quotes here
};

$.ajax(url, options);

Javascriptオブジェクトをリクエストを完了するために必要なJSON文字列に変換する場合は、 JSON2の何かJSON.stringify()を使用できます。

詳細を読みたい場合は、http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/を参照してください。間違いはあります。

于 2013-03-24T22:01:01.127 に答える