我在WebForms应用程序中使用WebMethod时尝试绑定到类,但是我收到以下错误:
{
"Message":"Invalidwebservicecall,missingvalueforparameter:\u0027dto\u0027.",
"StackTrace":"atSystem.Web.Script.Services.WebServiceMethodData.CallMethod(Objecttarget,IDictionary
2parameters)
atSystem.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Objecttarget,IDictionary
2parameters)
atSystem.Web.Script.Services.RestHandler.InvokeMethod(HttpContextcontext,WebServiceMethodDatamethodData,IDictionary`2rawParams)
atSystem.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContextcontext,WebServiceMethodDatamethodData)",
"ExceptionType":"System.InvalidOperationException"
}
但是,如果我使用3个单独的字符串属性,则调用成功且没有错误。我的问题是该对象可能有20多个属性,我不喜欢长时间的方法签名(更不用说它们很容易改变)。
的WebMethod
2parameters)
atSystem.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Objecttarget,IDictionary
jQuery用来调用方法
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class FooService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<FooDTO> Test(FooDTO dto)
{
System.Diagnostics.Debug.Assert(dto != null, "Oops, the dto is null");
return null;
}
}
答案 0 :(得分:1)
您应该创建另一个对象并将您的dto对象添加为属性。 请注意,该属性应与Web方法中的参数名称相同。
var data = {};
data.dto = dto;
然后发送您的数据对象
$.ajax({
data: JSON.stringify(data),
type: 'POST',
....
答案 1 :(得分:0)
一个参数怎么样;你可以使用像JSON.NET这样的库,它可以很容易地解析它并将它再次转换回一个对象;您需要做的就是确保它以字符串形式传递给服务器,该字符串是JSON内容。
答案 2 :(得分:0)
如果使用POST方法
,请删除JSON.stringify$.ajax({
data: dto,
type: 'POST',
....
});