2016-08-04 37 views
0

下面我有asp.net服务:

[ActionName("AddNewCompany")] 
public apiResult UpdateCompany(Company company, string UserCode, string APIKey) 
{ 
    spCard myStoreProcedure = new spCard(); 
    return myStoreProcedure.updateCompany(company, UserCode, APIKey); 
} 

我尝试使用上述服务$就打电话,我不断收到错误消息“未找到”

var apiParameter = { 
     Code: code, 
     Name: name, 
     CompanyGroup: companyGroup 
    }; 
    request = $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     url: G_BASE_URI + "testAPI/AddNewCompany", 
     data: "company=" + JSON.stringify(apiParameter) + "&UserCode=AAA&APIKey=123" 
    }); 

我改变$就到下面,仍然得到“未找到”

var apiCompany = { 
     Code: code, 
     Name: name, 
     CompanyGroup: companyGroup 
    }; 
    var apiParameter = { company: apiCompany, UserCode: "XXX", APIKey: "12345" }; 

    request = $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     url: G_BASE_URI + "dbCard/AddNewCompany", 
     data: jQuery.param(apiParameter) 
    }); 

我还有其他的服务,其中只有1个参数,它按预期工作。对于那些服务超过1个参数。我正面临着这个问题。

回答

1

对于C#模型联编程序来有效地映射您发送的值,您最好将数据提供给一个对象,您可以将其构造为与您的类的属性完全匹配。

请注意,在您当前的代码中,您将dataType设置为JSON,但您发送了表单urlencoded字符串。试试这个:

var data = { 
    company: { 
     Code: code, 
     Name: name, 
     CompanyGroup: companyGroup 
    }, 
    UserCode: 'AAA', 
    APIKey: '123' 
}; 

request = $.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: G_BASE_URI + "testAPI/AddNewCompany", 
    data: data 
}); 

还要注意,通过直接提供对象的$.ajaxdata财产jQuery将编码和逃避价值观的你,是必要的。

+0

我尽量避免为此目的创建许多课程。最后,我决定将参数更改为键入'string jsonObject',并且在客户端中,将使用JSON.stringify将对象转换为json并传递给服务器。在服务器站点上,将这个json字符串转换为动态对象并使用它。用这种方法,我可以跳过参数的创建对象类。 – Wilson