在 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 多个属性,我不喜欢那么长的方法签名(更不用说它们很容易改变)。
网络方法
[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;
}
}
jQuery用来调用方法
var dto = {};
dto.Test1 = 'Ticket Number';
dto.Test2 = 'Title';
dto.Test3 = true;
$.ajax({
url: '/service/FooService.asmx/Test',
data: JSON.stringify(dto),
contentType: "application/json; charset=utf-8",
dataType: "json",
type: 'POST',
success: function (data) {
alert('hooray!');
},
error: function (data) {
alert('NOPE');
}
});