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)
{
    ...
}

异常来自萤火虫)

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 回答