2013-10-01 4 views
0

Я пытаюсь вызвать веб-сервис ASP с использованием jQuery со сложным объектом в качестве ввода.Ошибка вызова ASP.net webservice с jQuery

Вот мои Jquery сноска:

request: function (url, method, data) { 
     var json = JSON.stringify(data); 
     return $.ajax({ 
      url: url, 
      type: method, 
      data: json, 
      error: ErrorHelpers.printErrorToConsole, 
      dataType: 'json', 
      contentType: 'application/json', 
      processData: false 
     }); 
    } 

JSON передается в выглядит следующим образом:

{ 
    "search": { 
     "WarehouseId": "", 
     "AuctionId": "", 
     "Barcode": "", 
     "Name": "", 
     "CategoryId": "", 
     "Description": "", 
     "ManufacturerId": "", 
     "StatusId": "", 
     "StatusOperator": "", 
     "HasPhoto": "", 
     "DateReceived": "", 
     "SellerAdministrativeArea": "", 
     "SellerId": "", 
     "IsApproved": "", 
     "Keyword": "", 
     "SortBy": "", 
     "RowStart": "", 
     "RowLimit": "10" 
    } 
} 

и мой веб определение метода выглядит следующим образом:

[WebMethod(EnableSession = true)] 
    [ScriptMethod(UseHttpGet = true)] 
    public List<ClientInventory> GetInventory(string search) 
    { //code 
    } 

Значит ли кто-нибудь знает, почему это ошибка? Вот ответ я получаю:

{ "Сообщение": "Invalid веб-службы вызова, отсутствует значение для параметра: \ u0027search \ u0027.", "StackTrace":»в System.Web.Script. Services.WebServiceMethodData.CallMethod (Объект мишень, IDictionary 2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary 2 параметра) \ г \ п на System.Web.Script.Services.RestHandler.InvokeMethod (HttpContext контекст, WebServiceMethodData methodData, IDictionary`2 rawParams) \ г \ п на System.Web.Script.Services.RestHandler.ExecuteWebServiceCall (контекст HttpContext , WebServiceMethodData methodData) "," Ex ceptionType ":" System.InvalidOperationException "}

+0

Как вы строите строку/параметр URL? –

+0

жестко запрограммирован. /api/blah.asmx/GetInventory – khalid13

+1

Ожидается строка, вы передаете объект поиска? Что должен делать ваш код со всеми этими данными? – christiandev

ответ

0

Вы должны создать класс ...

public class Search 
{ 
    public string WarehouseId { get; set; } 
    public string AuctionId { get; set; } 
    public string Barcode { get; set; } 
    public string Name { get; set; } 
    public string CategoryId { get; set; } 
    public string Description { get; set; } 
    public string ManufacturerId { get; set; } 
    public string StatusId { get; set; } 
    public string StatusOperator { get; set; } 
    public string HasPhoto { get; set; } 
    public string DateReceived { get; set; } 
    public string SellerAdministrativeArea { get; set; } 
    public string SellerId { get; set; } 
    public string IsApproved { get; set; } 
    public string Keyword { get; set; } 
    public string SortBy { get; set; } 
    public string RowStart { get; set; } 
    public string RowLimit { get; set; } 
} 

и изменить свой метод, как это ...

[WebMethod(EnableSession = true)] 
    [ScriptMethod(UseHttpGet = true)] 
    public List<ClientInventory> GetInventory(Search search) 
    { //code 
    } 

Кроме того, проверьте метод, который вы используете здесь ...

type: method, 

Предлагается в ошибка, которую вы используете Post?

+0

Я попытался точно (до публикации вопроса), но не повезло. :/ – khalid13

+0

В нем говорится, что вы используете POST? но у вас есть UseHTTPGet – christiandev

+0

dangit Я идиот. Я скопировал сообщение об ошибке с неправильной вкладки. Я отредактировал вопрос с правильным; мои извинения и спасибо за вашу помощь/время! – khalid13

0

Оказалось, что вы не должны использовать JSON.stringify() при отправке запросов GET. Изменение приложения для отправки/получения запросов POST решило проблему.

Метод подписи теперь выглядит следующим образом:

[WebMethod(EnableSession = true)] 
    //[ScriptMethod(UseHttpGet = true)] 
    public List<ClientInventory> GetInventory(Search search) 
    {} 

и request Fn в JS теперь проходит метод как «POST».

+0

Итак, выше работало? как в том, что я предлагал? – christiandev

+0

Нет, ошибка не была связана с вашим предложением. Проблема заключалась в использовании 'JSON.stringify()' при отправке параметров для почтового запроса.Я думаю, ваше предложение состояло в том, чтобы удостовериться, что я случайно не отправил сообщение, когда я должен был отправить сообщение. – khalid13

+0

Было предложено проверить, что вы используете правильный тип, и замените строку 'string' на класс' search', который я предоставил? Вам все еще нужно использовать 'JSON.stringify()' - или вы теперь проходите как строка? – christiandev

Смежные вопросы