1

json を使用して webservice を呼び出そうとします。例外パラメーターなしで Web サービスを呼び出すと、その作業が行われますが、パラメーターを送信しようとすると、エラーが発生します。

これは私のコードです:

function GetSynchronousJSONResponse(url, postData) 
{

    var xmlhttp = null;
    if (window.XMLHttpRequest)
        xmlhttp = new XMLHttpRequest();
    else if (window.ActiveXObject) {
        if (new ActiveXObject("Microsoft.XMLHTTP"))
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        else
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }

    url = url + "?rnd=" + Math.random(); // to be ensure non-cached version

    xmlhttp.open("POST", url, false);
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    xmlhttp.send(postData);
    var responseText = xmlhttp.responseText;
    return responseText;
}


function Test() 
{
    var result = GetSynchronousJSONResponse('http://localhost:1517/Mysite/Myservice.asmx/myProc', '{"MyParam":"' + 'test' + '"}');
    result = eval('(' + result + ')');
    alert(result.d);
}

これはエラーです:

System.InvalidOperationException: リクエストの形式が無効です: application/json; 文字セット=utf-8。

System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() で

System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest で

なにが問題ですか ?

前もって感謝します 。

4

3 に答える 3

1

私の知る限り、アプリケーションはapplication/jsonを投稿データ形式として受け入れることができません。代わりにapplication/x-www-form-urlencodedを使用し、JSONをリクエストパラメーターに設定します。リクエストパラメーターには、次を使用してアクセスできますRequest.Params["key"]

xmlhttp.open("POST", url, false); 
xmlhttp.setRequestHeader(
    "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
); 
xmlhttp.send("json="+encodeURIComponent(postData)); 
var responseText = xmlhttp.responseText; 
return responseText; 

また、コメントで述べたように、次の行を削除できます。

url = url + "?rnd=" + Math.random(); // to be ensure non-cached version   

POSTリクエストはキャッシュされないため、POSTリクエストでGETパラメータを使用することは一般的に悪い習慣です。

于 2010-02-02T15:07:45.153 に答える
1

これらの行をサーバーの web.config に追加して、同様の問題を修正しました。

<handlers>
  <add name="ScriptHandlerFactory" verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" />
</handlers>

このページをチェックしてください: http://msdn.microsoft.com/en-us/library/bb763183.aspx

于 2011-09-20T11:49:28.057 に答える