jQuery Ajax 到 asp.net asmx web 服务抛出请求格式无效:application/json
Posted
技术标签:
【中文标题】jQuery Ajax 到 asp.net asmx web 服务抛出请求格式无效:application/json【英文标题】:jQuery Ajax to asp.net asmx web service throws Request format is invalid: application/json 【发布时间】:2012-08-13 02:18:37 【问题描述】:我有 jquery 调用一个带有整数的 asp.net webservice。 在我们移植到 .net 4.0 的旧版应用程序上,我无法让这个调用正常工作。 我可以调用一个没有参数的方法,但是向 web 方法发送数据会返回以下错误:
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()
我在一个空白项目中创建了完全相同的代码,它运行良好。我在 web.config 中看不到空白项目添加的任何内容。
Jquery 代码
$.ajax(
type: "POST",
url: "/WebService1.asmx/Test",
data: JSON.stringify("code": 1234),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg)
alert(msg);
);
我的网络服务代码
<ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class WebService1
Inherits WebService
<WebMethod()>
Public Function Test(ByVal code As Integer) As String
Return "success"
End Function
<WebMethod()>
Public Function Hello() As String
Return "hello"
End Function
End Class
网页配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
</appSettings>
<connectionStrings>
</connectionStrings>
<system.web>
<httpRuntime enableVersionHeader="false" />
<httpCookies httpOnlyCookies="true" requireSSL="false" lockItem="true" />
<trace enabled="false" pageOutput="true" requestLimit="40" localOnly="true"/>
<httpModules>
</httpModules>
<compilation debug="true" strict="true" explicit="true" targetFramework="4.0">
</compilation>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
</pages>
<authentication mode="Forms">
<httpHandlers>
</httpHandlers>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
</modules>
<handlers>
</handlers>
<httpErrors errorMode="Custom" >
</httpErrors>
</system.webServer>
</configuration>
【问题讨论】:
您能发布您的 web.config 文件吗?我知道问题出在哪里,只需要在发布答案之前进行确认。 @DarinDimitrov 我已添加 web.config 但已删除敏感细节 【参考方案1】:DOH,我在错误的 web.config 中工作。
就像很多关于 SO 的问题一样,解决方案是添加以下内容。
<system.webServer>
<handlers>
<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" />
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</handlers>
</system.webServer>
【讨论】:
谢谢。解决了我的问题。但是你能解释一下它的作用吗?就我而言,它特定于一台机器。任何想法可能是什么原因?如果我不想更改我的配置文件,因为它在其他机器上运行良好,那么解决方案可能是什么。 很高兴您在错误的 web.config 中工作并发布了问题和答案。这为我节省了很多时间。 @Akie 我也不确定,但我可以告诉你的是 ScriptHandlerFactory 会在编译时将你的 WebServices 作为引用添加到你的 javascript 代码中。这意味着您可以通过 JavaScript 中的语法namespace.class.method
直接调用 WebServices 中的 WebMethods。但是,这就是我感到困惑的地方,所以我无法给出任何答案。【参考方案2】:
我遇到了同样的问题,最后运行了这个命令...
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe -i
请注意,您需要在管理员模式下的命令提示符才能工作。
【讨论】:
以上是关于jQuery Ajax 到 asp.net asmx web 服务抛出请求格式无效:application/json的主要内容,如果未能解决你的问题,请参考以下文章
通过 PageMethods 和 AJAX 调用将 JQuery 脚本错误记录到 ASP.NET 服务器
从 JQUERY 传递数据 | AJAX 处理 ASP.NET
jQuery Ajax POSTing 数组到 ASP.NET MVC 控制器