Skip to main content
 首页 » 编程设计

c#之使用 JSON 从 jQuery 调用 Web 服务

2024年02月01日28shangdawei

<分区>

好痛啊!我正在尝试从 JavaScript 调用 Web 服务,但我似乎无法找到让它工作所需的神奇调味料。

我的代码看起来像这样:

JavaScript:

$.ajax({ 
    url: "/Services/CompanyContactServices.asmx/AddContact", 
    type: 'POST', 
    contentType: "application/json", 
    dataType: "json", 
    data: { 
        companyId: 3725, firstName: firstName, lastName: lastName, email: email 
    }, 
    success: function (data) { 
        alert('Success!'); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
        alert(errorThrown); 
    } 
}); 

网络服务 (asmx.cs):

[WebService(Namespace = CompanyListServices.XmlnsNamespace)] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class CompanyContactServices : System.Web.Services.WebService 
{ 
    public const string XmlnsNamespace = "mynamespace"; 
 
    [WebMethod(EnableSession = true)] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string AddContact(int companyId, string firstName, string lastName, string email) 
    { 
        return new JavaScriptSerializer().Serialize(0); 
    } 
} 

我的 AddContact 方法开头的断点从未到达。

我的 ajax() 调用的 error 处理程序在 jqXHR 中包含以下错误消息:

{ Message":"Invalid JSON primitive: companyId.", "StackTrace":"at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input) at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer) at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}"

Chrome 报告以下网络数据:

Request URL:.../Services/CompanyContactServices.asmx/AddContact

Request Method:POST

Status Code:500 Internal Server Error

谁能看到我错过了什么?