Привязка к объекту при использовании WebForms WebMethods

0

Я пытаюсь привязать к классу при использовании WebMethod в приложении WebForms, но я получаю следующую ошибку:

{ "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

[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');
    }
});
Теги:
webforms
webmethod

3 ответа

1

Вы должны создать другой объект и добавить свой объект dto в качестве свойства. Обратите внимание, что свойство должно быть с тем же именем, что и ваш параметр в веб-методе.

var data = {};
data.dto = dto;

А затем отправьте свой объект данных

$.ajax({
data: JSON.stringify(data),
type: 'POST',
....
0

удалите JSON.stringify, если вы используете метод POST

$.ajax({
    data: dto,
    type: 'POST',
    ....
});
0

Как насчет одного параметра; вы можете использовать библиотеку, такую как JSON.NET, которая очень легко анализирует ее и снова преобразует обратно в объект; все, что вам нужно будет сделать, это убедиться, что оно перешло на сервер в виде строки, в которой эта строка является содержимым JSON.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню