1

jquery ajax を使用して配列を c# webmethod に渡そうとしています。

以下のコードは C# 4.0 では問題なく動作しますが、c# 2.0 では次の例外が発生します。誰でもこれを解決する方法を知っていますか?

JavaScriptコード

var myarray=new Array();
    $.ajax({
            type: "POST",
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            url: "ClientSideMethods.asmx/ArrayTest",
            data: { "values": JSON.stringify(myarray) }
        }
        ).complete(function (data) {
            alert('complete');
        });

c# コード

[WebMethod(EnableSession = true)]
public void ArrayTest(List<string> values)
{
    ...
}

例外( firebug から)

System.InvalidOperationException: Request format is invalid: application/json; charset=utf-8.
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

編集:contentType: "application/json; charset=utf-8",投稿 を削除すると機能しますが、値は配列として受信されません

編集:コンテンツタイプをcontentType: "application/json次のエラーに変更すると発生します

System.InvalidOperationException: AnywhereLogin Web Service method name is not valid.
   at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response)
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
4

2 に答える 2

2

設定した contentType に問題はありません。あたりです:

 contentType: "application/json; charset=utf-8",

まず、以下に示すように、web.config に有効なハンドラー マッピングがあることを確認します。

編集:

 <system.web>
  <httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
  </httpHandlers>
</system.web>

詳細については、このリンクをチェックしてください

それとは別に、以下のように、渡されるデータを一重引用符または二重引用符で囲む必要があります。

 data: "{ 'values':" + JSON.stringify(myarray) + "}"

または、jQuery が自動的に URL エンコードします。詳細については、この URLを確認してください

于 2013-09-24T08:03:32.767 に答える
1

このタイプの問題は、しばらく発生する可能性があります。webmethod を使用した ajax 呼び出しはコードからは正常に機能しますが、IIS でホストするとエラー 500 が表示されます。system.web の下の web.config に次のステートメントを追加することで問題が解決されることを心配しないでください:-

</system.web>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="ScriptModule" />
      <add name="ScriptModule" preCondition="managedHandler"     type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </modules>

    <handlers>
      <remove name="ScriptHandlerFactory"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </handlers>
  </system.webServer>
于 2015-02-12T01:21:31.097 に答える